Open-source RAG platform for companies

Your documents become an assistant that answers and shows where the answer came from. Documents, database, vector index and encryption keys stay on your infrastructure. You choose the models, and changing provider is a config file.

How ingest works

A file lands in storage and a Temporal workflow takes over: parse, chunk with a splitter chosen for the file type, generate a summary of the whole document and prepend it as its own chunk, embed densely and sparsely, upsert into the organization's Qdrant collection. It runs asynchronously, so a 400-page PDF does not block anything.

upload → parse → chunk → summarize → hybrid embed → Qdrant

How answering works

A question is first rewritten into a standalone one using the conversation so far, then expanded into an alternative phrasing. Both run as hybrid searches in parallel. Qdrant fuses dense and sparse results server-side with RRF, the union is deduplicated and, when a rerank provider is configured, passed to a cross-encoder before the model sees it, with citation prompting on top.

question → standalone → +1 variant → 2× hybrid search → RRF → dedupe → rerank → answer

Hybrid search is not a toggle. It is part of the schema collections are created with, so it is always on. Reranking is a toggle: it needs a feature flag and a provider's credentials, and is skipped without them. Every stage degrades rather than fails – a reranker error falls back to the raw vector order, an expansion error falls back to a single query.

Permissions at retrieval

Every chunk carries an accessible_by filter applied at query time. A document a user cannot open will not enter an answer, a citation, or the context sent to the model.

Many companies on one installation

A separate vector collection per organization, a guard in the data layer that flags any query missing its org filter, and two separate role hierarchies. One installation serves many clients, with no per-seat fees.

How it compares

Criterion Hosted "chat with your docs" Your own LangChain stack Ragen
Where your documents live Vendor's cloud Yours Yours
Choice of model Vendor's shortlist Anything Anything LiteLLM supports
Access control Usually per workspace Whatever you build Per file and folder, enforced at retrieval
Multi-tenant Per seat, per workspace Whatever you build Built in, org-scoped data and index
Retrieval quality Opaque Yours to tune, and to debug Hybrid, rerank and multi-query, a recorded decision per change
Time to a working answer Minutes Weeks Minutes, one command plus your own model keys
Cost shape Per seat, forever Your engineers' time Your infrastructure plus model spend
When it breaks Support ticket You You, with the source and the recorded decisions

If your requirements are genuinely unusual, building it yourself is a legitimate answer. Ragen is the better trade when you want those decisions already made, and documented, rather than made by you.

Requirements

Resource Evaluating Small production install
CPU 4 cores 4 cores or more
RAM 8 GB available to Docker 16 GB
Disk 25 GB 100 GB SSD, growing with your documents
Docker 24.0 or newer, Compose 2.26 or newer same
GPU not needed not needed

No GPU, unless you want one

Chat, embeddings and reranking all leave through the LiteLLM proxy, so the machine running Ragen does no model inference of its own. Point LiteLLM at a hosted provider and a laptop is enough. A GPU only enters the picture if you decide to serve models yourself, which is supported and is a separate box.

Where the memory actually goes

Service Idle memory Needed for
Presidio analyzer 959 MB PII masking (optional)
Docling 721 MB local document parsing
LiteLLM 560 MB every model call
Temporal 97 MB async ingest
Postgres 93 MB everything
Presidio anonymizer 55 MB PII masking (optional)
Qdrant 43 MB retrieval, grows with your index
LiteLLM's Postgres and Temporal UI 38 MB the two supporting containers
Total about 2.6 GB

Measured on an idle stack, backing services only. Two of those are optional and together account for a gigabyte: drop Presidio if you are not masking PII, and DOCUMENT_PARSER=legacy skips Docling. Qdrant is the line that moves as you add documents, because the figure above is a near-empty index. Size that one against your own corpus rather than against this table. The four Ragen applications run on top of all this and are not in the table.

Stand it up yourself

One command brings up the lot: web, API, ingest worker, admin panel and the backing services. Then upload a document and ask it something.