// the find
arc53/DocsGPT
Private AI platform for agents, assistants and enterprise search. Built-in Agent Builder, Deep research, Document analysis, Multi-model support, and API connectivity for agents.
DocsGPT is a self-hostable RAG platform for building document-grounded chatbots and agents. It handles the full stack: ingestion (PDF, Office, audio, web crawl), embedding, retrieval, and a multi-model LLM layer on top. Aimed at teams who want something like a private Notion AI or enterprise search without sending data to a SaaS.
The agent tooling is genuinely broad — MCP support, API tool connectivity, a workflow engine with conditional nodes, and scheduled agents backed by RedBeat. That's a real feature set, not just RAG with a chat UI. The multi-model abstraction is clean: swap between OpenAI, Anthropic, Google, Ollama, or llama_cpp by changing config, with YAML-defined model registries per provider. The recent roadmap execution is credible — OIDC/SSO with SCIM, RBAC, team scoping, and OpenTelemetry observability all shipped in Q1–Q2 2026, which is a lot of enterprise-grade infrastructure for an OSS project. Alembic migrations with 24 versioned scripts means schema changes are tracked properly, not applied ad-hoc.
The codebase mixes Flask, Celery, and async SSE in ways that create subtle concurrency footguns — `async_sse.py` alongside a synchronous Flask app means you're fighting the event loop constantly. The FAISS index files (`index.faiss`, `index.pkl`) checked into the application directory suggest the vector store story is still half-baked: there's a graph RAG module and connectors for Postgres, but the default path apparently still writes flat files to disk. The research agent and workflow engine are relatively new and the test coverage for those paths looks thin from the CI config — `pytest.yml` exists but there's no obvious fixture harness for agent flows. Self-hosting complexity is real: you need Postgres, Redis (for Celery/RedBeat), and potentially separate workers, which the Docker Compose setup papers over but doesn't eliminate.