Retrieval, document and multi-agent systems, and LangChain, LangGraph and MCP projects. 10 projects, each with its code on GitHub.
Production RAG that refuses to guess. Hybrid retrieval over one Postgres, cross-encoder reranking, and citations verified by locating every quote in the real source before it is shown. Runs on SQLite for a zero-dependency demo.
RAG techniques measured as retrieval, on 14,602 real HotpotQA passages, with no language model in the loop. Retrieving smaller chunks made it worse; multi-query fusion made it worse; a second retrieval round with no reasoner was worth +7.1 points on bridge questions.
RAG vs CAG vs MAG, measured on real data with ground-truth answers. Where the cost crossover actually is, and why prompt caching decides it.
Ask a database questions in English. It cannot damage the database and it shows you the SQL. Three safety layers with the prompt as the weakest; CI attempts five real writes as the agent role on every push.
Document processing that sends a human one question, not one document. Field-level confidence routing, cross-field arithmetic validation that catches what OCR confidence never will, and Pakistani formats: CNIC, NTN, STRN, PK IBAN.
A research agent that tells you when sources disagree instead of picking one, deduplicates republished copies before counting corroboration, and verifies every quote against the fetched text.
A multi-agent back office that resolves tickets across four mock enterprise systems and stops before anything irreversible. Business-hours SLAs, playbook execution, approval gates, full audit trail.
LangChain projects built around the failure each one is usually demoed past. Constrained decoding looked 19 points less accurate than plain prompting and is really 3x more accurate. Retrieval on documents that already fit in context cost 53 points of accuracy.
LangGraph projects built around the failure each one is usually demoed past. Doubling a revision loop from 3 to 6 iterations changed nothing; a confidence gate dropped clean-ticket accuracy from 100% to 33%; a silent branch failure was disclosed 0% of the time.
Chain-of-thought made every model worse on TruthfulQA, and SWE-bench patches failed on diff formatting rather than reasoning. All local, no API keys.