DeepPilot is a full-stack research assistant. It takes a user question, generates focused search queries, gathers source-backed web context, reflects on missing information, and produces a cited final answer with optional visual blocks.

.
├── frontend/ # React frontend
├── backend/ # LangGraph/FastAPI backend
├── Dockerfile # Combined frontend/backend image
├── docker-compose.yml # Local database and containerized service definitions
└── Makefile # Install and development commands
Copy the example file and add your keys:
cp backend/.env.example backend/.envKeep each entry in KEY=value form without spaces around =.
Required:
NVIDIA_API_KEY=your_nvidia_integrate_key
WEB_RESEARCH_API_KEY=your_web_research_keyOptional:
GEMINI_API_KEY=your_google_gemini_key
OPENAI_API_KEY=your_openai_key
LANGSMITH_API_KEY=your_langsmith_keyNotes:
NVIDIA_API_KEYis used by NVIDIA Integrate models such askimi-k2.6, DeepSeek, GLM, and Minimax.OPENAI_API_KEYis used by OpenAI official models such asgpt-5.5.GEMINI_API_KEYis used by Google official Gemini models such asgemini-3.5-flash.WEB_RESEARCH_API_KEYis used by the web research adapter that gathers grounded source context. If it is not set, the backend also acceptsGEMINI_API_KEYfor this role.- Model options are loaded from
backend/config.yaml.
Prerequisites:
- Node.js 20+
- Python 3.11+
- uv
- Docker Desktop, for local Postgres/Redis only
Install all dependencies:
make installStart frontend and backend together:
make devDefault local URLs:
- Frontend:
http://localhost:5173/app/ - Backend API:
http://127.0.0.1:2026 - Database UI:
http://127.0.0.1:8080 - LangGraph Studio:
https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2026
make dev starts Postgres, Redis, Adminer, and the LangGraph API runtime in Docker, then runs the frontend through local Vite. The backend container bind-mounts local backend source and config.yaml, so normal backend code edits do not require rebuilding the image. LangGraph sessions are stored in Docker Postgres.
make dev is equivalent to:
make dev-dbIn this mode, the backend container connects to Docker Postgres and Redis through Docker service names. LangGraph creates its Postgres tables after the backend starts and handles the first thread/run operations.
If Docker Desktop reports that no space is left on device, restart Docker Desktop and clear only build cache first:
make docker-prune-build-cacheThe project includes .dockerignore so local node_modules, .venv, and .langgraph_api caches are not sent into Docker builds. make dev uses the backend image for the LangGraph runtime, but mounts local backend source into it. Rebuild the backend image after dependency, Dockerfile, frontend build, or package metadata changes:
make docker-buildTo run only the containerized backend, use:
make dev-backend-containermake dev-container is kept as an alias for the same database-backed development stack:
make dev-containerTo use the file-backed local LangGraph dev server instead of Postgres, run:
make dev-backend-fileAdminer login for local database inspection:
System: PostgreSQL
Server: langgraph-postgres
Username: postgres
Password: postgres
Database: postgres
From a desktop database client such as DBeaver, TablePlus, DataGrip, or pgAdmin, connect with:
Host: 127.0.0.1
Port: 5433
Username: postgres
Password: postgres
Database: postgres
To migrate old file-backed local sessions into the DB-backed API, first start Docker Desktop and the app:
make devIn another terminal, preview importable sessions:
cd backend
uv run python scripts/migrate_local_sessions.py --dry-runImport sessions that already have AI answers:
cd backend
uv run python scripts/migrate_local_sessions.pymake dev supports local frontend and backend code iteration:
- Frontend changes under
frontend/srcare handled by Vite HMR and usually update in the browser without a restart. - Backend Python changes under
backend/srcandbackend/config.yamlare bind-mounted into the backend container. Restartlanggraph-apiafter backend changes so Python imports reload:make dev-backend-restart. - Dependency changes,
.envchanges, Dockerfile changes, frontend build changes, or package metadata changes require rebuilding or recreating the backend container. - If the virtual environment was moved from another directory or command scripts look stale, run
make installonce to rebuild them.
make dev-backend-file keeps a local-file-storage fallback for backend-only debugging without Postgres.
cd backend
uv run python examples/cli_research.py "What changed in AI agent frameworks this month?"Optional arguments:
uv run python examples/cli_research.py "Your question" \
--initial-queries 3 \
--max-loops 2 \
--reasoning-model deepseek-v4-proThe main graph is defined in backend/src/agent/graph.py:
- Generate focused search queries from the user question.
- Run web research for each query and keep source metadata.
- Check whether the gathered context is sufficient.
- Generate follow-up queries if there are information gaps.
- Compose the final cited answer with the selected model.
- Attach optional visual blocks when the answer benefits from them.
Build the image:
docker build -t deeppilot -f Dockerfile .Start the services:
NVIDIA_API_KEY=<your_nvidia_key> \
WEB_RESEARCH_API_KEY=<your_web_research_key> \
LANGSMITH_API_KEY=<your_langsmith_key> \
docker compose upOpen:
http://localhost:8123/app/
DeepPilot is released under the MIT License. See LICENSE for details.