Use case

Ask your own documents. Get the page number.

Policies, manuals, contracts and support archives hold the answers; staff find them by asking whoever remembers. Ask the corpus instead, and get the page.

Cited to the page Lexical, semantic, hybrid Built-in vector store Runs fully local

From a folder of PDFs to answers people check.

Four stages, all inside your infrastructure. Nothing ships out to be embedded, indexed or answered.

01

Convert

PDF, Office, email and scans become clean text with structure intact.

02

Index

Chunks embed locally into the built-in store, or Qdrant and pgvector.

03

Ask

Hybrid retrieval grounds a local model; answers come from passages.

04

Check

Each answer carries document, page and score for one-click verification.

Evidence, not assertion.

An internal search tool survives only if people can verify it. Three properties make that the default.

Citations

Document, page, passage

Every claim carries document, page and passage, so a reader checks it against the original instead of trusting it.

Refusal

It says when it does not know

When the corpus does not support an answer, that is the answer, stated plainly rather than papered over with confidence.

Scoring

You can see why a result ranked

Retrieval score and strategy per hit, so a poor answer is diagnosed and tuned rather than argued about.

Wording, meaning, or both together.

Wording matters for a part number, meaning matters for a policy question. Run either, or both fused.

Lexical

When the exact term matters

BM25 with language-aware analysis, so part numbers, clause references and product codes match exactly as typed.

Semantic

When the phrasing does not match

Vector retrieval for questions asked in different words from the source, which is most questions about an unread policy.

Hybrid

Fused, with weights you set

Both arms fused by reciprocal rank or normalized score, then reranked; recency, diversity and per-document collapse are request switches.

Less to operate than you would expect.

The stack that usually takes three vendors comes up with the product.

Storage

No database to provision

Full-text and vector search run on a local cluster that ships with the product; PostgreSQL with pgvector and Qdrant are supported too.

Boundary

Embeddings stay put too

Corpus, chunks and vectors are all local. Nothing ships out to be embedded, the step that quietly breaks residency requirements.

Assistants

Controlled access for agents

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, ask, cite.

Load documents, ask in natural language, get grounded answers with page citations. The server exposes the same over HTTP and MCP.

AskTheCorpus.cs
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

Point it at your own corpus.