Multi-model routing by task
Groq-hosted Llama and Qwen for the cheap deterministic lanes, Gemini for the reasoning lanes. Every agent is labelled with which lane it is.
Before I wrote any of that, I was learning it in a different room. In British Parliamentary debate you get seven minutes and an opposing bench whose entire job is to find the one claim you didn’t substantiate. Adjudicators don’t score confidence. They score whether you backed it up.
Three tournaments so far, and I ran the tab on two of them — Tabbycat end to end: pairings, scoring, break calculations. Tab is the job you get handed when the numbers have to be right and there’s no time to check them twice.
Debate record verified via Calico Tab
I build AI systems for domains where being confidently wrong is expensive: regulatory compliance, evaluation, and developer tooling. Every one of them has a deterministic floor. I didn’t realise I’d ported the debate rule into my code until someone read five of my repos back to me.
Tech Head · Dec 2025 — present
smvitdebsoc.com live, role-gated, daily digest piped in
Everything the society runs on is mine to keep working — the site, Axiom, and the tab. During a live tournament there is no staging environment: the pairings go up in front of the room, or the round does not start.
Founding Engineer
First engineer, so every call was mine to make and mine to answer for: architecture, data model, agent design, interface. Building what you specified yourself is the fastest way to find out which of your own decisions were wrong.
Freelance Engineer
Paid client work, delivered against someone else's deadline and someone else's definition of done — which is where you learn that the requirement you were handed is rarely the requirement you actually have to satisfy.
A 14-agent system that researches one motion a day, builds the case both ways, coaches the framing, quizzes me at night, and distils the week on Sunday. It runs live every morning for my debating society.
RSS, Tavily, Wikipedia and my own PDFs, ranked by FAISS.
Proposition and opposition, so I cannot rehearse only my side.
Where the clash actually is, and which burden I keep dropping.
Adversarial follow-ups. Survive them or the point was never made.
Seven days of motions into what I still get wrong.
Groq-hosted Llama and Qwen for the cheap deterministic lanes, Gemini for the reasoning lanes. Every agent is labelled with which lane it is.
FAISS-backed, over RSS, Tavily, Wikipedia and my own PDFs.
A free-tier 429 should degrade the output, not kill the run.
State lives in a JSON file and the Actions cache. No database, no server.
Unnamed on purpose, specific anyway. I architected it — system design, agent harness, RAG layer and the specs. My collaborator implemented.
01
The brief
The accuracy target was gating on false positives — keep the model from crying wolf.
I argued the opposite
A missed non-compliant contract is the precise regulatory failure the bank is paying to avoid. A false positive costs a lawyer an hour; a false negative is the thing that reaches the regulator.
What shipped
Recall became the primary gate. Precision stayed, as the secondary metric.
02
Nobody asked for this
Before any AI-versus-human number gets trusted, two independent adjudicators label the same 50-contract set and their disagreement rate is recorded.
Why it matters
That number is the ceiling on any accuracy the system can honestly claim.
The consequence
If two compliance lawyers agree only 85% of the time, a model scoring 92% against one of them is measuring noise, not performance.
Client and product unnamed by agreement. The engineering decisions are not.
A finding without a quoted source line is downgraded to a warning — never reported as a violation.
npm i -D @mobasshirkhan/docguard
v1 scope, in writing: no LLM calls at all. Some problems don’t need a model.
npx dockgate setup
Every agent keeps a deterministic fallback. The pipeline runs offline under test and never hard-fails on a model error.
Four services behind one login, carrying about fifty people a day. Every one is scoped in writing — and if it breaks on a Saturday, the round does not run.
curl -s pd-virtual-assistant.vercel.app/health
Tournament operations for a live debate event — check-in, pairings, rooms, results, leaderboard. I ran tab on Tabbycat for two tournaments first; this is that job rebuilt so the software does it.
POST /api/pairing/:roundId/power-match
A coding-practice platform that coaches while you type, then makes you defend the answer. It never just hands you the solution — the constraint is the product.
Nothing here needs my word for it — read the commits.
44 repositoriesThe audit trail is the product.
Tested at 10 million documents. It wasn’t the model.
So I built the thing that sits between the agent and git.
Not a bigger model. Not better embeddings.
What I check before I trust a codebase.
You don’t need a PhD for this one.
Written before anyone asked for the position they argue.
Not because it’s tidy, but because I work alone, asynchronously, with AI agents that need to be told exactly what “done” means.
0 / 5 practices, each with the artefact
If you want to know what I’m like to work with before we ever speak, read a repo. That’s what it’s there for.Read a repo
Specs, phase-gated build plans and operating manuals — including which document wins when two of them disagree.
AGENTS.md, in every repoNot a policy I claim. 185 on the evaluation pipeline, 23 on the society site, and a benchmark suite on DEBASS that scores citation validity, not just latency.
debass benchmarksEach of the 14 agents is labelled deterministic-lane or LLM-lane, with a chain to fall back through when a free tier returns 429.
Debating-coachdockgate v1: no LLM calls at all. The event assistant refuses debate coaching outright. Written down before the first commit, not discovered later.
pd-virtual-assistantA health endpoint that has to report Redis up, LLM configured and an explicit CORS allowlist before the thing is considered live. Wildcards are rejected in production.
GET /healthNo ratings out of ten — a number I award myself is not evidence. Every group below names the repo where you can watch it being used.
Answered here rather than on a first call, so you can decide whether the call is worth booking.
I build applied AI systems — LLM applications, agentic workflows and retrieval-augmented generation (RAG) pipelines — rather than training foundation models from scratch. In practice that means the work sits between machine learning and backend engineering: shipping AI features that hold up in production, with evaluation and guardrails around them. Titles that map to what I do: AI engineer, LLM engineer, generative AI engineer, AI application engineer, machine learning engineer (applied).
Domains where being confidently wrong is expensive — banking compliance, legal and contract review, anything a regulator can audit. The engineering difference is that a plausible-sounding answer is a failure, not a partial success. So every system I ship has a deterministic floor beneath the model, gates on recall rather than precision where a miss is the costly error, and refuses to assert anything it cannot ground in a citation. This is the work sometimes labelled RegTech, compliance automation, or trustworthy and responsible AI.
Yes. I have built retrieval-augmented generation pipelines using Qdrant and FAISS for vector search, BGE and MiniLM sentence-transformer embeddings, hybrid retrieval combining BM25 with dense search and rank fusion, and cross-encoder rerankers on top. DebateIQ runs RAG across four separate stores with model routing and fallback chains. The retrieval code and its benchmarks are public on GitHub.
With eval harnesses that run like tests rather than demos. I benchmark citation validity and groundedness, not just latency; I gate on recall where a false negative is the expensive error; I baseline human inter-annotator agreement before trusting a model score at all; and I probe adversarially for the failure mode rather than the happy path. The benchmark suite on DEBASS scores citation validity directly.
Python with FastAPI and Pydantic on the backend; TypeScript with Next.js, React and Node.js on the front; PostgreSQL with Prisma, and Redis for caching and sessions. Models via Gemini, Groq (Llama and Qwen) and OpenRouter. Qdrant and FAISS for vectors. Docker, GitHub Actions CI/CD and Vercel for shipping, with pytest and Playwright for tests.
Yes — DocsGuard is published on both npm and PyPI and runs at roughly 338 installs a month in other developers’ terminals. The site and tournament software for SMVIT DebSoc run live in production, where a live round cannot wait for a staging environment. Every project on this site links to its own repository so the claim is checkable rather than asserted.
Yes — I am open to AI engineering roles, full-time or contract, remote or based in Bengaluru (Bangalore), Karnataka, India. The fastest way to reach me is email at mobasshirkhan9931@gmail.com, or through LinkedIn and GitHub.