RiverbornBook Call
Nongor AILocal-First RAG Engine

Every answer, grounded in a citation you can check.

Nongor is Riverborn's local-first knowledge base: hybrid retrieval, cross-encoder reranking, and citation-validated answers, with zero document data ever leaving the machine. Built for legal, healthcare, financial services, defense, and any team that can't ship sensitive documents to a third-party cloud API.

nongor.local — querying private knowledge base
Nongor local-first knowledge base interface showing a citation-grounded answer
Checking source chunks…
0 bytes left this machine

Your most useful knowledge base is also the one you can't send to the cloud.

Legal contracts, patient records, defense specs, and financial filings are exactly the documents a knowledge base is most useful for, and exactly the documents most teams cannot ship to a third-party cloud API. Most RAG SaaS is a non-starter before the first demo even runs.

Sensitive Documents Can't Leave the Building

Compliance and contractual obligations mean uploading documents to a vendor's cloud is simply off the table for legal, healthcare, financial services, and defense teams, no matter how good the model is.

A Confident, Wrong Answer Is a Liability

A fluent, ungrounded answer over a contract clause or a patient record is worse than no answer. Teams need to see exactly which source sentence backs every claim before they act on it. LLMs will even fabricate a citation id that looks real.

Knowledge Trapped in Long Documents

The answer already exists inside a 90-page spec or a wiki nobody reads end to end. Finding it means a human re-reading dozens of pages, so the same question gets re-researched again and again.

The local-first guarantee
lives in the code.

The boundary is drawn in the code, not a document you have to trust. Parsing, chunking, embedding, reranking, and the vector store all run on the machine Nongor is deployed on. Only one function in the entire system is capable of leaving the box, and in local mode, the server won't even boot if that endpoint points anywhere but a loopback or private address.

Where does the document go?

Toggle between a typical cloud RAG SaaS and Nongor's local-first path.

Your machine — zero network egress
STEP 1Upload documentStays local
STEP 2Embed with local BGE-M3Stays local
STEP 3Hybrid search on local LanceDBStays local
STEP 4Answer generationEgress-guarded

The final step routes through a single call_llm()chokepoint. In local mode the server refuses to boot unless that endpoint is a loopback or private address, so a config typo can't silently ship your documents off the machine.

Stacked Retrieval Signals,
Then a Verified Answer

Rather than trusting one similarity search, Nongor stacks independent retrieval signals (dense vectors, sparse BM25, and a cross-encoder reranker), then grounds every generated claim in a citation that is checked against the retrieved text before it ever reaches the user.

01Hybrid Search

Retrieval is the ceiling

If the right passage never makes it into the prompt, no model can answer correctly, so accuracy work starts before generation.

02RRF Fusion

Two engines beat one

Dense vectors catch paraphrase; BM25 catches exact tokens like part numbers and proper nouns that embeddings blur.

03Cross-Encoder

A second, stronger signal

A cross-encoder reranker scores the exact query-chunk pair, not just first-stage similarity, before anything enters the prompt.

04Citation Check

Trust, then verify

The model must cite every claim, and every citation is checked against what was retrieved before it's shown.

Retrieval & Grounded Generation Visualizer

Watch a query pass through hybrid retrieval, reranking, generation, and citation validation.

State: Running...
User Query+ intent router
Intent Routerskip if general chat
Dense (BGE-M3)vector · top-50
BM25 Full-Textsparse · top-50
RRF Fusionk=60 merge
Cross-Encoder RerankBGE-reranker → top-8
Generate + Citeevery claim gets an id
Valid Citationresolves to a chunk
Flagged Citationnot in retrieved set

An answer you can check, every time.

Nongor shows its work. Every claim ships with a citation id, and every id is validated against the chunks that were retrieved. Nongor flags a fabricated reference before it ever reaches your team.

Streaming chat with a live source panel next to every answer
SSE events for status, delta text, citations, and timings
Fabricated citations are flagged, never shown as real
Intent router skips retrieval entirely for general chat
DEMO INTERFACE

Ask the Knowledge Base

>_

What Makes Nongor Different

Every piece of the pipeline is built for the same two goals: retrieval that finds the right passage, and answers a team can verify without leaving the app.

01

Hybrid Retrieval

Dense vector search (BGE-M3) and sparse BM25 full-text search run in parallel and merge via Reciprocal Rank Fusion, covering both paraphrase recall and exact-token recall.

02

Cross-Encoder Reranking

BGE-reranker-v2-m3 rescopes the fused candidates on the exact query-chunk pair, down to the top-8 that enter the prompt.

03

Citation Validation

Every claim carries a citation id. After generation, each id is checked against the retrieved chunks, and fabricated ones are flagged, never silently shown as real.

04

Local-First Architecture

Parsing, chunking, embedding, reranking, and the LanceDB store all run on-device with zero network egress. The corpus can be indexed and queried with the network cable pulled.

05

Idempotent Ingestion

Every document is fingerprinted with a SHA-256 hash of its normalized markdown, so re-ingesting an unchanged file is a no-op and re-uploads never duplicate the corpus.

06

Swappable LLM Provider

DeepSeek, OpenAI, Ollama, vLLM, or LM Studio sit behind one config flag and a single call_llm() chokepoint, so a vendor swap touches exactly one file.

Every Claim, Measured

Accuracy claims are only as good as the harness behind them. Nongor ships its own eval runner: a hand-labeled question set that scores retrieval, faithfulness, and citation validity, and fails CI on any ≥3% relative regression against the last run.

Recall@5≥ 0.85Labeled expected chunks present in the top-5 retrieved
Recall@10≥ 0.92Labeled expected chunks present in the top-10 retrieved
Answer faithfulness≥ 90%Scored automatically by an LLM-as-judge
Valid citation rate≥ 95%Cited ids that resolve to a real retrieved chunk
p50 query latency≤ 5sEnd-to-end, on commodity hardware

Built to Run Anywhere

A provider-agnostic core keeps the whole stack portable. Swap the LLM vendor without touching retrieval, storage, or the UI, and the whole thing still ships as a single Docker Compose deployment.

Frontend & UINuxt 3, Vue, streaming chat with a live source panel
BackendPython 3.11, FastAPI, Uvicorn (async), SSE streaming
Retrieval & ModelsBGE-M3 embeddings, BGE-reranker-v2-m3, hybrid dense + BM25, RRF fusion
Data & StoreLanceDB (vector + full-text + metadata in a single file), SHA-256 idempotency
LLM & OpsAny OpenAI-compatible provider (DeepSeek / OpenAI / Ollama / vLLM), Docling parsing, Docker Compose

Frequently Asked Questions

What teams evaluating Nongor for legal, healthcare, and financial services usually ask first.

In local mode, no. Parsing, chunking, embedding, reranking, and the vector store all run on-device with zero network egress. The only network-capable call is the final answer-generation step, and a boot-time egress guard refuses to start the server if that endpoint isn't a loopback or private address.

Nongor ships its own eval harness against a hand-labeled question set, enforcing gates: Recall@5 ≥ 85%, Recall@10 ≥ 92%, answer faithfulness ≥ 90% (scored by an LLM-as-judge), and a valid-citation rate ≥ 95%. CI fails automatically on any ≥3% relative regression against the last run.

Yes. Point the single call_llm() chokepoint at a local runtime (Ollama, vLLM, or LM Studio) and the whole stack, including generation, runs with zero external network calls. The full system ships as a Docker Compose deployment.

PDF, DOCX, PPTX, HTML, Markdown, and plain text, plus direct URLs. Office and PDF formats are parsed with Docling to preserve structure; web pages use trafilatura with a headless Playwright fallback for JavaScript-rendered content.

Any OpenAI-compatible endpoint (DeepSeek, OpenAI, Ollama, vLLM, or LM Studio) selected with a single config flag. Embedding and reranking always use the local BGE models regardless of which LLM you choose for generation.

An intent router skips retrieval entirely for general chat so it doesn't force a source that doesn't exist. When a generated claim's citation id doesn't resolve to a retrieved chunk, it's flagged as invalid rather than rendered as a trustworthy source.

Local-First · Citation-Grounded

Answers your team can trust.
Data that never leaves.

Deploy Nongor AI as a local-first knowledge base for your sensitive documents. Connect with our engineering team to scope your deployment or run it against your own corpus.