Retrieval
How a question becomes a cited answer — four engines, reranking, and synthesis.
Chordian does not run "a vector search". A question fans out to four retrieval engines in parallel, the merged results are reranked, and only then does a model write an answer.
The four engines
| Engine | Answers questions like | Why it is needed |
|---|---|---|
| Vector | "What do we know about employee benefits?" | Semantic similarity across unstructured text |
| Graph | "Who at Acme knows someone at Nexio?" | Relationships that no amount of text similarity will surface |
| Episodic | "What did we believe about this deal in June?" | Time-aware recall over bi-temporal facts |
| Cache | Anything asked recently | Sub-100ms repeat answers |
You do not choose engines. The query is classified and the weighting follows from its class — a relational question leans on the graph, a semantic one on vectors.
Cache correctness
The cache key folds in a per-scope corpus version counter that increments on every successful ingest. New content therefore invalidates cached answers for that scope automatically.
This matters more than it sounds. The failure mode it prevents — ingest a document, ask about it, get a confidently stale answer from cache — is one users never report as a bug, because it looks like the ingest silently failed.
Sources before the answer
On the streaming endpoint, the citation list is emitted before the first answer token:
event: sources data: { "citations": [...] }
event: token data: { "text": "The Acme" }
event: token data: { "text": " expansion deal" }
event: done data: { "answer": "...", "suggested_followups": [...] }The ordering is a guarantee, not an implementation detail. A reader sees what the answer is grounded in before they read the prose, which is the difference between spotting a hallucination and discovering it later.
Degradation
Every engine call runs under a timeout. If one engine is slow or unavailable the others still answer — you get a result built from what was reachable rather than a hung request. If reranking is unavailable the pipeline falls back to reciprocal rank fusion, which is worse than a cross-encoder but far better than an error.
Before the model sees anything
Retrieved content passes the data perimeter before synthesis. Restricted values are dropped entirely and confidential values are masked, so a secret that reached the index cannot leak through an answer.