In daily useRetrieval serverJuly 2026
Vanquish
A neuro-symbolic corrective-retrieval runtime that treats context as infrastructure.
Rust · llama.cpp · Tantivy · Qdrant · MCP
Retrieval is a correctness problem, not a search problem
Every coding agent has the same failure mode: it answers from the wrong paragraph with total confidence. The fix is not a bigger context window — it is making sure the model is looking at the right paragraph, with a citation, and that something checks its work before the answer is written. Vanquish is that something.
Vanquish is a Rust-native, GPU-accelerated corrective retrieval-augmented
generation (CRAG) runtime exposed as an MCP
server. It is deliberately not an answer generator. It sits between the agent
and the corpus, and its only job is to return a graded, line-cited context
envelope — grounded when the evidence is sufficient, insufficient with
best-effort leads when it isn’t. The calling agent writes the answer; Vanquish
decides whether the agent had any business writing it.
It currently grounds three corpora I actually work against daily: the Intel 64/IA-32 Software Developer’s Manual (~15k structurally-chunked sections), the Hyper-V Top-Level Functional Specification, and the UEFI 2.10 specification.
The route
One core loop, vanquish_route, with a model-free fast path and a full
corrective path:
query
→ lookup-shaped? → entity-lane / section-ref bypass (~80ms, no models)
→ otherwise:
F2LLM-v2 embed (ONNX)
→ Qdrant dense + Tantivy BM25 (+ optional codebase graph, capped & gated)
→ RRF fusion
→ jina-reranker-v3 listwise rerank (one forward pass, all candidates)
→ relative-threshold triage
→ auto-merge: co-located chunks collapse into whole-section spans
→ grader (Qwen3.5-0.8B, logit-confidence): sufficient?
yes → envelope { status: grounded }
no → per-chunk CRAG refinement, prune noise
→ widen: hint-augmented query + entity-anchored traversal
along parsed cross-references, relaxed triage
→ loop (bounded; early exit when nothing new surfaces)
exhausted → envelope { status: insufficient, best-effort leads }
Three design choices carry most of the weight:
Structure-aware ingestion. Documents are chunked by heading hierarchy, every chunk prefixed with its breadcrumb. Tables and code fences stay atomic — a half-table is worse than no table. Cross-references (“see Section 28.2.3”) are parsed at ingest into a traversable graph, which is what makes the widen step symbolic rather than another blind embedding call: when the grader rejects a pass, Vanquish walks the document’s own citation structure. That is the “neuro-symbolic” in the tagline — neural retrieval, symbolic correction.
A grader that reads logits, not vibes. The sufficiency judge is Qwen3.5-0.8B running under llama.cpp GGUF, and its verdict is the first-token probability of the positive class — a calibrated logit-confidence read, not parsed free text. Bounded loops (3 max) with early exit keep worst-case latency sane.
A tool family, not one endpoint. vanquish_outline (TOC from breadcrumbs —
navigate before querying), vanquish_lookup (exact-match entity lane for
registers, MSRs, opcodes), vanquish_expand (fetch exact lines from a
citation), vanquish_overview (RAPTOR-lite cached section summaries),
vanquish_status, and vanquish_feedback — a usefulness signal that is the
data source for future tuning. Cited spans are also readable as MCP resources
(vanquish://source#L1042-L1069), so the client never needs filesystem access.
The model stack is pinned by measurement
| Role | Model | Backend |
|---|---|---|
| Embedder | F2LLM-v2-0.6B | ONNX |
| Reranker | jina-reranker-v3 (BF16) | listwise, llama.cpp GGUF + safetensors projector |
| Grader | Qwen3.5-0.8B (UD-Q5_K_XL) | llama.cpp GGUF, ChatML, logit-confidence |
None of these are defaults — each won a measured bake-off against its
alternatives, and a shadow_reranker_backend config can A/B a challenger
against live traffic (logging rank disagreements and Kendall tau) without
touching served results. Storage is Qdrant for dense
vectors, Tantivy for BM25, and
SQLite for sections, entities, cross-references, feedback, and shadow-rerank
disagreements. The retrieval plane is load-tested at 13M+ vectors — the
corpora above are small by design (precision beats bulk for spec work), but
the pipeline does not break a sweat at eight figures.
Evals are the gate, not an afterthought
vanquish-eval ships a golden set of hand-authored SDM queries with expected
sections and fragments — grep-verified against the real corpus, CPU-only,
CI-run — plus deterministic route-trace replay so any change can be
regression-checked against recorded history, and compare to diff two runs.
The rule is simple: nothing model-shaped — reranker swap, grader swap, HyDE,
multi-query, merge policy — ships as the default until the harness says so
with a number.
For concurrency, the server also runs as an HTTP daemon: one warm process serving N agents behind mandatory bearer auth, with per-session cancellation and an admission semaphore — so a fleet of agents doesn’t each pay for its own ~3GB of loaded models.
What I actually use it for
The corpus set is the tell: Intel SDM, Hyper-V TLFS, UEFI. Vanquish exists because hypervisor work means living inside three specifications totalling tens of thousands of pages, and “the agent hallucinated a VMCS field encoding” is a multi-day debugging sentence. Grounded retrieval with line citations turns spec consultation from a liability into a fast path — and the same runtime grounds anything else I point the indexer at.