Flagship, case study
Government Service AI Navigator
A citizen types "mera CNIC gum hogya hai, Karachi mein hun" and gets a personalised,
source-cited action plan: which service, which branch, which documents they specifically
still need, which office, what happens next. English, Urdu and Roman Urdu.
🔒 The language model never supplies a government fact.
Not a fee. Not a deadline. Not a document name. Every such fact traces to a database row or a retrieved
chunk of an official document, and carries its source to the screen. The model detects intent, phrases
questions, and translates, and nothing else.
The test for whether that boundary actually holds: swap the model for a template renderer, are the
answers still correct? They are. LLM_PROVIDER=mock runs the entire system
that way, and the evaluation suite still passes.
51
scripted citizen scenarios, 3 services, 3 languages
0
unsupported claims across the whole suite
100%
document F1 and scenario identification
4.5
questions asked on average per citizen
🎯 The interview only asks what matters
Before asking anything, it simulates every possible answer and compares the outcomes. If a question
cannot change the result, it is never asked. That is real information gain over the rule set, not a shortened form.
🔍 An output verifier that fails the build
Every rendered number, duration, count and URL is scanned and rejected if it is not traceable to a
stored fact, including digits that drift during translation. CI fails if one slips through.
🤲 Blanks beat plausible inventions
Unverified fees ship as NULL and render as "not verified, confirm at the
counter." A number that looks right and is wrong costs a citizen a wasted trip.
⚖️ Three-valued logic underneath
Eligibility is computed in code with true / false /
unknown, so "not yet asked" is never confused with "no". Most of the safety
properties fall out of that one distinction.
Next.js 15TypeScriptPostgreSQL
pgvectorHybrid RAGDocker
GitHub ActionsVercel110 tests