Technical architecture
How the system is assembled.
Sovereign deployment is not a policy choice layered onto a hosted API. It is a stack you can point at: models served locally, a corpus indexed in place, adapters trained on your material, and a boundary enforced at the network layer. This is how those pieces fit together.
The runtime
Default stackvLLM · Qwen2.5-14B · Q4Open-weight models, served where the corpus already sits.
We deploy open-weight models through vLLM, Ollama or llama.cpp, depending on the hardware and the throughput you need. vLLM suits a dedicated GPU host with continuous load. Ollama is the right default for a single-node deployment that must be operable by your own staff. llama.cpp covers CPU-only or mixed environments where a GPU is present but not always available.
Sizing starts from your document types and concurrency, not from a model leaderboard. A 7B–14B model at Q4 or Q5 quantisation will serve most narrow document work — contract abstraction, variance narrative, code search — at acceptable latency on a single consumer or datacentre GPU. We size up when the held-out evaluation shows the smaller model missing cases your reviewers care about, not because a larger number appeared on a benchmark.
Quantisation is a trade-off we document explicitly. Q4_K_M is usually the starting point: half the VRAM of full precision with a small recall cost on rare tokens. Q8 is reserved for tasks where a single misread clause or figure is unacceptable and the hardware can carry it. The point is not to run the largest model you can afford. It is to run the smallest model that passes your evaluation on your material.
For narrow document work, a well-fitted small model beats a frontier API. The API model is general; your corpus is not. Retrieval plus a house adapter on a 14B base will outperform a 70B general model on questions whose answers live in your own index, because the retrieval step does the heavy lifting and the model's job is synthesis in your register, not world knowledge.
Retrieval
The corpus is indexed in place. Citations fall out of retrieval, not from a prompt.
Your documents stay where they are. We mount the vault read-only and build an index beside it — embeddings, structured metadata, and a keyword layer — without copying the corpus to a third party or a shared tenancy.
Chunking follows document structure rather than a fixed token count. A contract is split at clause boundaries. A ledger export is split at account and period. Source code is split at function and module, with imports and call sites preserved in the metadata so cross-file questions still resolve. Fixed-size chunks produce citations that point at the middle of a paragraph; structure-aware chunking produces citations a reviewer can open and verify.
Search is hybrid: dense vector retrieval for paraphrase and concept, BM25 for identifiers, dates, amounts and proper nouns. Results are fused and re-ranked before they reach the model. The model never sees the whole corpus; it sees the passages retrieval selected, which is why hallucination on sourced questions drops sharply compared with a raw completion.
We do not ask the model to cite. Citations are assembled from the retrieval trace: each passage carries its source file, page or locator, and the answer template binds claims to those locators. If retrieval returns nothing above threshold, the system says so rather than inventing a source. That behaviour is enforced in the pipeline, not requested in the system prompt.
Adaptation
TrainingQLoRA · in-place · 0 egressLoRA adapters on your material. Evaluated on a set you define.
General models write in a generic register. Your firm does not. We train low-rank adapters — LoRA or QLoRA, depending on VRAM — on material you designate: redacted matters, anonymised packs, approved correspondence. Training runs on the same hardware as inference. No weights and no training data leave the boundary.
Evaluation is against a held-out set the firm defines before training starts. Typical cases: ten questions whose answers are known and documented, five document types the model must handle, three failure modes you have already seen from hosted tools. We report precision on sourced claims, refusal rate when retrieval is empty, and register drift measured against your style guide. A model that passes on our generic set but fails on yours does not ship.
Adapters are versioned alongside the base model. Rollback is a configuration change, not a retraining exercise. When your corpus shifts — a new reporting format, a merger, a regulatory change — we retrain on the delta and re-run the held-out set before the new adapter is promoted.
The boundary
Network egress denied. Keys in your custody. Updates signed and logged.
The boundary is enforced below the application layer. Egress is denied at the firewall or via host policy — not by a setting in the model server that an operator could toggle. Telemetry from inference frameworks is disabled or blocked. There is no phone-home path in the stack we deploy.
Encryption keys for the vault and the model weights sit in your custody: your HSM, your cloud KMS, your hardware security module. We hold operator credentials only for the duration of an engagement, scoped to what is needed, and revoked on handover.
Model and adapter updates in air-gapped environments arrive on removable media, verified against a signed manifest, and installed through a procedure that is itself logged. The log stays inside the boundary. An auditor can reconstruct what version was running on any date and who approved the change.
Operations
Observable inside the perimeter. Versioned. Somebody holds the pager.
Observability is local: request logs, retrieval traces, latency and token counts, GPU utilisation. Dashboards run on your monitoring stack — Prometheus and Grafana by default, or whatever you already operate. Nothing is shipped to our infrastructure.
Every answer is reconstructable from its trace: the query, the passages retrieved, the model and adapter version, the prompt hash, the output. Logs are retained according to your policy, not ours.
Models and adapters are versioned in a registry inside the boundary. Promotion and rollback are explicit operations with an approver. Capacity planning is based on measured tokens per day and peak concurrency, with headroom for batch jobs such as indexing and training.
We document who holds the pager: your team, ours, or a shared rotation. For most deployments the firm owns day-two operations after handover; we remain available on a support retainer. The runbook covers restart, rollback, index rebuild, and the air-gapped update path.
What we do not do
Honest limits, stated upfront.
We do not claim the model replaces judgment. It drafts, retrieves and reconciles. The partner, the director and the engineer sign what goes out. That is a design constraint, not a disclaimer we hope you ignore.
We do not fine-tune away hallucination. Retrieval and refusal when evidence is missing reduce it on sourced work; they do not eliminate confabulation on open questions. The held-out evaluation includes unsourced prompts specifically to measure this.
We do not recommend local deployment where a hosted model is genuinely fine. If your material can safely transit to an API under terms you control, and your obligation does not require physical residency, a local stack is overhead you do not need. We will say so in the diagnostic.
Start
See whether the stack fits your obligation.
The two-week diagnostic maps your corpus, names a runtime, and states plainly whether sovereign deployment is warranted — or whether a hosted model would serve you better.