Citations
Document, page, passage
Every claim carries document, page and passage, so a reader checks it against the original instead of trusting it.
Policies, manuals, contracts and support archives hold the answers; staff find them by asking whoever remembers. Ask the corpus instead, and get the page.
Four stages, all inside your infrastructure. Nothing ships out to be embedded, indexed or answered.
01
PDF, Office, email and scans become clean text with structure intact.
02
Chunks embed locally into the built-in store, or Qdrant and pgvector.
03
Hybrid retrieval grounds a local model; answers come from passages.
04
Each answer carries document, page and score for one-click verification.
An internal search tool survives only if people can verify it. Three properties make that the default.
Citations
Every claim carries document, page and passage, so a reader checks it against the original instead of trusting it.
Refusal
When the corpus does not support an answer, that is the answer, stated plainly rather than papered over with confidence.
Scoring
Retrieval score and strategy per hit, so a poor answer is diagnosed and tuned rather than argued about.
Wording matters for a part number, meaning matters for a policy question. Run either, or both fused.
Lexical
BM25 with language-aware analysis, so part numbers, clause references and product codes match exactly as typed.
Semantic
Vector retrieval for questions asked in different words from the source, which is most questions about an unread policy.
Hybrid
Both arms fused by reciprocal rank or normalized score, then reranked; recency, diversity and per-document collapse are request switches.
The stack that usually takes three vendors comes up with the product.
Storage
Full-text and vector search run on a local cluster that ships with the product; PostgreSQL with pgvector and Qdrant are supported too.
Boundary
Corpus, chunks and vectors are all local. Nothing ships out to be embedded, the step that quietly breaks residency requirements.
Assistants
An external assistant queries the corpus through a governed MCP tool and receives ranked passages, never the filesystem or the whole collection.
Assistants working this corpus through MCP have their own use case.
Load documents, ask in natural language, get grounded answers with page citations. The server exposes the same over HTTP and MCP.
using LMKit.Model;
using LMKit.Retrieval;
var chatModel = LM.LoadFromModelID("qwen3.5:9b");
var embedModel = LM.LoadFromModelID("embeddinggemma-300m");
using var chat = new PdfChat(chatModel, embedModel);
await chat.LoadDocumentAsync("employee-handbook.pdf");
await chat.LoadDocumentAsync("it-security-policy.pdf");
await chat.LoadDocumentAsync("data-retention-policy.pdf");
var answer = await chat.SubmitAsync(
"How long do we retain applicant data?");
Console.WriteLine(answer.Response.Completion);
// Grounded answer with passage retrieval and page citations.
Private Document Intelligence