Agentic AI

  • Multi-agent · deployed

    A planner asks a supply question in plain English. The system does the arithmetic exactly rather than guessing at it, and stops for a manager on anything above $10,000.

    98% injection-resistance · 168 tests · 10 business intents

    A LangGraph agent routes the question to 1 of 7 exact solvers (OR-Tools, CVXPY, SciPy) and a pgvector CRAG pipeline. A Redis-backed human gate holds high-cost decisions, and 6 FastMCP typed contracts stand between the model and anything that executes.

    • LangGraph
    • FastMCP
    • Neo4j
    • pgvector
    • OR-Tools
    • Azure AKS
    • Bicep
  • Cloud deployment · production

    The pipeline that puts the copilot on live infrastructure, plus the 6 checks that have to pass before any release reaches a user.

    Bicep IaC · Kustomize overlays · 6-check smoke test · OTel

    Bicep provisions AKS, ACR, Postgres, Redis, CosmosDB, and Azure Monitor. Kustomize overlays keep staging and production apart without duplicating a manifest, and a production deploy waits for manual approval.

    • Azure AKS
    • Bicep
    • Kustomize
    • GitHub Actions
    • OTel
    • NGINX

Retrieval and RAG

  • Production RAG · deployed

    Ask a question about a body of research papers and get an answer with its sources attached. It runs from a single command, on an ordinary laptop.

    ALCE Citation Precision 0.84 · 47,810 indexed chunks

    FastAPI and Chainlit in a two-service Docker Compose stack, published to GHCR on every push. There is no Python environment to set up and no index to download by hand.

    • FastAPI
    • Chainlit
    • SPECTER2
    • ColBERT v2
    • CRAG
    • Docker
    • GHCR
  • Retrieval research · ongoing

    The research behind that chatboard: how to find the one relevant passage among 47,810, and when to admit there isn't one rather than inventing an answer.

    ALCE 0.8373 · Faithfulness 0.7150 · 84 QASPER questions

    SPECTER2 and BM25 retrieval fused with RRF, ColBERT v2 reranking, a calibrated CRAG gate, and Llama-3.1-8B generation with inline citations. One fix to answer extraction took ALCE Recall from 0.057 to 0.84.

    • SPECTER2
    • BM25
    • ColBERT v2
    • CRAG
    • HyDE
    • vLLM
    • RAGAS

Model alignment and post-training

  • Model alignment research · SFT + DPO

    Teaching a model to read a company's financial tables and show its working, so an analyst can check the number instead of trusting it.

    SFT loss 2.74 → 0.785 · DPO reward accuracy 97.7%

    A three-stage pipeline on Llama-3-8B: supervised fine-tuning with chain-of-thought annotation, 1,800 preference pairs labeled by a second model, then DPO under 4-bit quantization. A third model judges the results, so no model grades its own work.

    • Llama-3-8B
    • LoRA / QLoRA
    • SFT
    • DPO
    • RLAIF
    • TRL
    • FinQA
  • Frontier model alignment · active consulting

    Making frontier models better at hard science problems, and designing the scoring so the improvement can be measured rather than asserted.

    RLHF · RLVR · Rubric criteria · Chain-of-Thought

    RLVR where the answer is objective, RLHF where it is not, and rubric criteria in between for graded scoring. Plus agent trajectory analysis and the preference datasets that feed SFT and DPO.

    • RLHF
    • RLVR
    • SFT
    • DPO
    • Chain-of-Thought
    • Rubric evaluation

Applied ML and deep learning

  • Forecasting · deployed

    Telecom sites in Cameroon were losing diesel and nobody could see where. This predicts what each site should burn and flags the ones burning more. Operators still run it.

    NSE 0.986 · 84,617 liters of fuel accounted for

    A Random Forest regressor behind a Flask web app, with a deviation threshold at the mean plus 2 standard deviations, a monitoring dashboard, and exports for audits.

    • Python
    • Flask
    • Scikit-Learn
    • Pygal
    • Render.com
  • Doctoral research · published

    How large a training step you can take before a model stops learning, worked out in advance instead of found by watching a run fail.

    The maximum learning rate stops decaying exponentially with depth

    Global convergence of gradient descent for deep linear networks, carrying earlier gradient flow analyses into the discrete setting and proving convergence to a global minimum for almost all initializations.

    • Deep linear networks
    • Gradient descent
    • Lojasiewicz inequality
    • PyTorch