{"id":45733607,"url":"https://github.com/hyhmrright/jarvis","last_synced_at":"2026-03-04T04:03:45.775Z","repository":{"id":340143868,"uuid":"1131506902","full_name":"hyhmrright/JARVIS","owner":"hyhmrright","description":"AI assistant platform with RAG knowledge base, multi-LLM support (DeepSeek/OpenAI/Anthropic), and streaming conversations. Built with FastAPI + Vue 3.","archived":false,"fork":false,"pushed_at":"2026-03-03T08:13:48.000Z","size":1049,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2026-03-03T10:53:38.221Z","etag":null,"topics":["ai","chatbot","fastapi","langchain","langgraph","llm","python","rag","typescript","vue3"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyhmrright.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-10T06:23:04.000Z","updated_at":"2026-03-02T15:38:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hyhmrright/JARVIS","commit_stats":null,"previous_names":["hyhmrright/jarvis"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/hyhmrright/JARVIS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyhmrright%2FJARVIS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyhmrright%2FJARVIS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyhmrright%2FJARVIS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyhmrright%2FJARVIS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyhmrright","download_url":"https://codeload.github.com/hyhmrright/JARVIS/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyhmrright%2FJARVIS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30071670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T03:25:38.285Z","status":"ssl_error","status_checked_at":"2026-03-04T03:25:05.086Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","chatbot","fastapi","langchain","langgraph","llm","python","rag","typescript","vue3"],"created_at":"2026-02-25T10:11:53.370Z","updated_at":"2026-03-04T04:03:45.770Z","avatar_url":"https://github.com/hyhmrright.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[中文](docs/i18n/zh/README.md) | [日本語](docs/i18n/ja/README.md) | [한국어](docs/i18n/ko/README.md) | [Français](docs/i18n/fr/README.md) | [Deutsch](docs/i18n/de/README.md)\n\n# JARVIS\n\n\u003e An AI assistant platform with RAG knowledge base, multi-LLM support, and real-time streaming conversations — featuring a Dark Luxury design language.\n\n![License](https://img.shields.io/github/license/hyhmrright/JARVIS)\n![Python](https://img.shields.io/badge/python-3.13-blue)\n![Vue](https://img.shields.io/badge/vue-3-brightgreen)\n\n## Features\n\n- **Multi-Model Support** — DeepSeek / OpenAI / Anthropic, switchable per-user in Settings\n- **RAG Knowledge Base** — Upload PDF / TXT / MD / DOCX with automatic chunking and vector indexing\n- **Streaming Chat** — SSE token-by-token output via LangGraph ReAct agent\n- **Dark Luxury UI** — Glassmorphism cards, gold gradient accents, smooth animation transitions\n- **Multilingual** — 6 languages: Chinese / English / Japanese / Korean / French / German\n- **Production-grade Infrastructure** — 4-layer network isolation, Traefik edge router, Prometheus + Grafana observability\n\n## System Limitations (Sandbox)\n\nJARVIS runs strictly inside an isolated Docker container environment to ensure system safety and security. \n\n- **No Host OS Access**: JARVIS cannot execute commands on your local host system (e.g., macOS, Windows, Linux).\n- **No Native Package Managers**: It cannot install native software on your computer (like running `brew install`, `apt-get`, or `npm install -g` on your physical machine). \n- **Isolated Execution**: Any terminal commands executed by the AI (such as Python scripts or shell utilities) run solely inside the backend Docker container or a dedicated Sandbox container, completely isolated from your main operating system.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|------------|\n| Backend | FastAPI · LangGraph · SQLAlchemy · Alembic |\n| Frontend | Vue 3 · TypeScript · Vite · Pinia |\n| Database | PostgreSQL · Redis · Qdrant (Vector DB) |\n| Storage | MinIO |\n| LLM | DeepSeek · OpenAI · Anthropic |\n| Edge Router | Traefik v3 |\n| Observability | Prometheus · Grafana · cAdvisor |\n\n## Prerequisites\n\n| Tool | Version | Install |\n|------|---------|---------|\n| Docker + Docker Compose | 24+ | [docs.docker.com](https://docs.docker.com/get-docker/) |\n| uv | latest | `curl -LsSf https://astral.sh/uv/install.sh \\| sh` |\n\n\u003e **Local development only** additionally requires [Bun](https://bun.sh) for the frontend.\n\n## Quick Start\n\n### 1. Clone and generate environment\n\n```bash\ngit clone https://github.com/hyhmrright/JARVIS.git\ncd JARVIS\nbash scripts/init-env.sh\n```\n\n\u003e Requires `uv` (used internally to generate the Fernet encryption key). No other setup needed.\n\n### 2. Add your LLM API key\n\nOpen `.env` and fill in at least one key:\n\n```\nDEEPSEEK_API_KEY=sk-...      # https://platform.deepseek.com\nOPENAI_API_KEY=sk-...        # optional\nANTHROPIC_API_KEY=sk-ant-... # optional\n```\n\n### 3. Start\n\n```bash\ndocker compose up -d\n```\n\nFirst run builds the Docker images — allow a few minutes. Once healthy:\n\n| Service | URL | Available |\n|---------|-----|-----------|\n| **App** | http://localhost | always |\n| Grafana (monitoring) | http://localhost:3001 | always |\n| Traefik dashboard | http://localhost:8080/dashboard/ | dev only |\n| Backend API (direct) | http://localhost:8000 | dev only |\n\n\u003e The default `docker compose up -d` auto-merges `docker-compose.override.yml`, which exposes debug ports and enables hot-reload for backend code. For production, see below.\n\n### Troubleshooting\n\n**Services fail to start** — check logs:\n```bash\ndocker compose logs backend\ndocker compose logs traefik\n```\n\n**Rebuild from scratch** (after changing Dockerfiles or dependencies):\n```bash\ndocker compose down\ndocker compose build --no-cache\ndocker compose up -d --force-recreate\n```\n\n**Port conflict on `:80`** — stop whatever holds port 80, then retry.\n\n---\n\n## Docker Compose Files\n\nThis project uses two compose files that work together:\n\n| File | Purpose |\n|------|---------|\n| `docker-compose.yml` | **Base (production)** — minimal surface: only `:80` and `:3001` exposed |\n| `docker-compose.override.yml` | **Dev overrides** — auto-merged by Docker Compose; adds debug ports, hot-reload |\n\nDocker Compose automatically merges the override file when you run `docker compose up -d`, so **no extra flags are needed for local development**. For production, explicitly exclude it:\n\n```bash\n# Development (default) — merges both files automatically\ndocker compose up -d\n\n# Production — base file only, no debug ports, no hot-reload\ndocker compose -f docker-compose.yml up -d\n```\n\n## Production Deploy\n\n```bash\ndocker compose -f docker-compose.yml up -d\n```\n\nExposed ports: `:80` (app) and `:3001` (Grafana) only.\n\n---\n\n## Local Development\n\nRun backend and frontend natively for faster iteration.\n\n**Step 1 — start infrastructure:**\n\n```bash\ndocker compose up -d postgres redis qdrant minio\n```\n\n**Step 2 — backend** (new terminal, from repo root):\n\n```bash\ncd backend\nuv sync\nuv run alembic upgrade head\nuv run uvicorn app.main:app --reload   # http://localhost:8000\n```\n\n**Step 3 — frontend** (new terminal, from repo root):\n\n```bash\ncd frontend\nbun install\nbun run dev   # http://localhost:5173  (proxies /api → localhost:8000)\n```\n\n---\n\n## Project Structure\n\n```\nJARVIS/\n├── backend/                    # FastAPI (Python 3.13 + uv)\n│   ├── app/\n│   │   ├── agent/              # LangGraph ReAct agent\n│   │   ├── api/                # HTTP routes (auth/chat/conversations/documents/settings)\n│   │   ├── core/               # Config, JWT/bcrypt/Fernet security, rate limiting\n│   │   ├── db/                 # SQLAlchemy async models + sessions\n│   │   ├── infra/              # Qdrant / MinIO / Redis singletons\n│   │   ├── rag/                # Document chunker + embedder + indexer\n│   │   └── tools/              # LangGraph tools (search/code_exec/file/datetime)\n│   ├── alembic/                # Database migrations\n│   └── tests/                  # pytest suite\n├── frontend/                   # Vue 3 + TypeScript + Vite + Pinia\n│   └── src/\n│       ├── api/                # Axios singleton + auth interceptor\n│       ├── stores/             # Pinia stores (auth + chat)\n│       ├── pages/              # Login / Register / Chat / Documents / Settings\n│       └── locales/            # i18n (zh/en/ja/ko/fr/de)\n├── database/                   # Docker init scripts (postgres/redis/qdrant)\n├── monitoring/                 # Prometheus config + Grafana provisioning\n├── traefik/                    # Traefik dynamic routing config\n├── scripts/\n│   └── init-env.sh             # Generates secure .env (requires uv)\n├── docker-compose.yml          # Base orchestration\n├── docker-compose.override.yml # Dev overrides (debug ports + hot-reload)\n└── .env.example                # Environment variable reference\n```\n\n---\n\n## Development\n\n### Code Quality\n\n```bash\n# Backend (run from backend/)\nuv run ruff check --fix \u0026\u0026 uv run ruff format\nuv run mypy app\nuv run pytest tests/ -v\n\n# Frontend (run from frontend/)\nbun run lint:fix\nbun run type-check\n```\n\n### Pre-commit Hooks\n\n```bash\n# Run from repo root\npre-commit install\npre-commit run --all-files\n```\n\nHooks: YAML/TOML/JSON validation · uv.lock sync · Ruff lint+format · ESLint · mypy · vue-tsc · gitleaks secret scanning · block direct commits to `main`.\n\n---\n\n## Environment Variables\n\n`bash scripts/init-env.sh` auto-generates all credentials. You only need to supply an LLM API key.\n\n| Variable | Description |\n|----------|-------------|\n| `POSTGRES_PASSWORD` | PostgreSQL password |\n| `MINIO_ROOT_USER/PASSWORD` | MinIO object storage credentials |\n| `REDIS_PASSWORD` | Redis auth password |\n| `JWT_SECRET` | JWT signing secret |\n| `ENCRYPTION_KEY` | Fernet key for encrypting user API keys at rest |\n| `GRAFANA_PASSWORD` | Grafana admin password |\n| `DEEPSEEK_API_KEY` | **Fill in manually** |\n| `OPENAI_API_KEY` | Optional |\n| `ANTHROPIC_API_KEY` | Optional |\n\nSee `.env.example` for the full reference.\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](.github/CONTRIBUTING.md).\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyhmrright%2Fjarvis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyhmrright%2Fjarvis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyhmrright%2Fjarvis/lists"}