A minimal RAG (Retrieval-Augmented Generation) app. Upload documents into named pipelines and chat with an AI agent grounded on your content.
- Create multiple document pipelines (knowledge bases)
- Upload PDF, TXT, and Markdown files
- Chat with retrieved context via Ollama (default, local & free)
- Optional bring-your-own-key for OpenAI or Anthropic
- Protected by a shared app API key (no user accounts)
- Python 3.11+
- Node.js 18+
- Ollama running locally (or via Docker)
Pull required Ollama models:
ollama pull nomic-embed-text
ollama pull llama3.2One command (starts Ollama if installed, backend, and frontend):
./start.shTo stop backend and frontend:
./start.sh stopOr start manually:
- Copy environment config:
cp .env.example .env- Start the backend:
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --port 8000- Start the frontend (new terminal):
cd frontend
npm install
npm run dev- Open http://localhost:5173 and enter the API key from
.env(change-meby default).
cp .env.example .env
docker compose up --buildAfter Ollama starts, pull models inside the container:
docker compose exec ollama ollama pull nomic-embed-text
docker compose exec ollama ollama pull llama3.2- Frontend: http://localhost:5173
- Backend API: http://localhost:8000
- API docs: http://localhost:8000/docs
- Enter the app API key on first visit.
- Create a pipeline (e.g. "Q3 Reports").
- Upload documents — they are parsed, chunked, embedded, and stored in Chroma.
- Ask questions in the chat panel. Answers cite source filenames.
- Switch provider to OpenAI or Anthropic and enter your API key for cloud models.
| Method | Endpoint | Description |
|---|---|---|
| GET | /health |
Health check + Ollama status |
| POST | /pipelines |
Create pipeline |
| GET | /pipelines |
List pipelines |
| DELETE | /pipelines/{id} |
Delete pipeline |
| POST | /pipelines/{id}/documents |
Upload document |
| GET | /pipelines/{id}/documents |
List documents |
| POST | /pipelines/{id}/chat |
RAG chat (SSE stream) |
All endpoints except /health require the X-API-Key header.
backend/ FastAPI API, ingest, retrieval, LLM
frontend/ Vite + React minimal UI
db/ SQLite metadata, Chroma vectors, uploads (gitignored)