You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Full observability — Prometheus metrics, Pino structured logging, request ID propagation
Docker Compose — One command to spin up all services
Services
Container
Port
Purpose
Atlas API
3001
Fastify HTTP server (Bun)
Docling
8000
PDF parsing (Python/FastAPI)
RAPTOR
8001
Hierarchical tree builder (Python/FastAPI)
PostgreSQL
5432
pgvector + BM25 full-text search
Neo4j
7474
Graph DB (provisioned, integration TBD)
Prometheus
9090
Metrics collection
Grafana
3030
Metrics dashboards
Quick start
# 1. Install JS dependencies
bun install
# 2. Install Python service dependencies
pip install -r docling-service/requirements.txt
pip install -r raptor-service/requirements.txt
# 3. Set up environment
cp .env.example .env
# Edit .env with your API keys (JINA_API_KEY, GEMINI_API_KEY)# 4. Start infrastructure (PostgreSQL, Neo4j, Prometheus, Grafana)
docker compose up -d postgres neo4j prometheus grafana
# 5. Run database migrations
bunx prisma migrate deploy
# 6. Start Python microservices (in separate terminals)
bun run docling-service/main.py &
bun run raptor-service/main.py &# 7. Start the API server
bun run dev
Using Docker Compose (all services)
docker compose up --build
API
Ingestion
Method
Route
Description
POST
/ingest/pdf
Upload PDF → Docling parses → returns chunks
POST
/ingest/url
{ url } → fetch + extract content
POST
/ingest/image
Upload image → Gemini describes
POST
/ingest/code
{ content, filepath } → split into blocks
POST
/ingest/full
Upload file → full pipeline: ingest → embed → RAPTOR → store
POST
/test/embed
{ texts } → test Jina embeddings
Query
Method
Route
Description
POST
/query
{ query } → multi-stage search → Gemini answer
Health & Metrics
Method
Route
Description
GET
/health
Service health check
GET
/metrics
Prometheus metrics
Query flow
POST /query { "query": "What is RAPTOR indexing?" }
Embed query via Jina (retrieval.query)
Vector search — cosine similarity on all tree nodes via pgvector HNSW index
BM25 search — PostgreSQL full-text search on leaf nodes