Sovereign RAG stack now live — Apertus 70B, hybrid search, reranker, Docling
Our retrieval-augmented generation pipeline is in production. Documents you upload are parsed by Docling, indexed with BGE-M3 dense + BM25 sparse vectors, queried with Reciprocal Rank Fusion, and reranked by a cross-encoder before answering with Apertus 70B — the Swiss AI Initiative model. Everything runs on our hardware in Lugano, under Swiss jurisdiction.
What is live
You can now upload your own documents (PDF, DOCX, Markdown, plain text) on my.siati.ai/dashboard/rag, and ask questions about them in plain Italian, English, German or French. The answers cite the exact source chunks they come from. No third-party API touched, no byte leaves Switzerland.
The pipeline is built end-to-end on open-weight, open-source components, hosted entirely on our own infrastructure in Lugano:
| Step | Component | License |
|---|---|---|
| Document parsing | Docling (IBM) | MIT |
| Dense embeddings | BGE-M3 (BAAI, multilingual) | Apache 2.0 |
| Sparse vectors | BM25 (in-house, multilingual stopwords) | own |
| Vector store | Qdrant 1.18 | Apache 2.0 |
| Hybrid fusion | Reciprocal Rank Fusion (Qdrant native) | – |
| Reranker | BGE-reranker-v2-m3 (cross-encoder) | Apache 2.0 |
| LLM | Apertus 70B Instruct (Swiss AI Initiative — EPFL + ETH + CSCS) | Apertus license |
Why it matters
Plain dense retrieval — what almost every "chat with your documents" service does today — misses two common cases:
- Exact-term queries (codes, names, dates, acronyms). The dense embedding buries them in semantic neighbourhoods. We add BM25 sparse vectors that score exact tokens with classic information retrieval. Qdrant fuses both rankings natively with Reciprocal Rank Fusion.
- Semantically close but wrong matches. Cosine similarity is a one-shot judgement; a cross-encoder reranker re-reads the top candidates jointly with the query and re-orders them with full attention. Measurable +15–25% recall@5 on standard RAG benchmarks.
For PDF parsing we replaced pdftotext with Docling: it preserves
tables (as structured markdown), reading order on multi-column layouts,
figure-caption pairing, and falls back to OCR on scanned pages. Tables
are the most common thing other RAG stacks butcher silently.
How to try it
- Sign in to my.siati.ai/dashboard/rag
- Create a knowledge base
- Drag-and-drop PDFs (up to 50 MB each)
- Ask questions — answers come with cited sources
Developers: API documented at wiki.siati.ai/api/rag. Implementation details in wiki.siati.ai/concepts/rag, tuning guide at wiki.siati.ai/cookbook/rag-tuning.
What we did NOT build with
We deliberately did not use NVIDIA NeMo Retriever — excellent enterprise package but it would have locked us into NVIDIA NIM containers + NV-Embed proprietary weights, blurring our sovereignty story. Same value with open components, no monovendor dependency.
Everything in this stack is auditable, reproducible, replaceable.