Rohan ChavanAI / ML Engineer

I build self-improving agent systems.

Two shipped pieces of the same idea, closing the loop where a system's own signal or a teacher's guidance measurably improves capability.

Agents that catch their own accuracy drift and repair it, and reasoning that transfers from a teacher model to a student, both verified by execution and pre-registered stats. Working toward recursive self-improvement.

statusOpen to Opportunities
locationBay Area, CA · open to relocate
focusself-improving agents | evals | reasoning transfer
the improvement loop
  1. signalwindowed execution accuracy on the agent’s own runs
  2. diagnosisthe monitor flags the drift down
  3. correctiontargeted few-shot from the teacher, no fine-tuning
  4. verificationSQL re-run on a contamination-free held-out split

the verified result becomes the next signal

AgentWatch repair loop · 4 eng · verified by execution, not a judge model
runs/ | training history

Seven runs, shipped.

01
2026

AgentWatch self-correcting Text-to-SQLAI ENG WORLD'S FAIR

ReAct Text-to-SQL agent that catches its own accuracy drift and repairs it. 10% to 33% on hard Spider queries, McNemar p = 0.016, zero regressions.

ReActText-to-SQLMiniMax-M3 (teacher)Qwen2.5-1.5B (student)OllamaSpider
RoleAI Engineer
Team4 eng | Rudd, Agarwal, Yiwen
When2026
Context

Problem

A ReAct Text-to-SQL agent with a windowed execution-accuracy monitor. When the agent's success rate drifts down, the system injects targeted few-shot examples from a teacher model and re-checks recovery by executing the SQL against a contamination-free held-out split. No fine-tuning. Improvement is verified by running the query, not by a judge model.

What I did

  • 10% to 33% accuracy on 30 hard Spider queries. The repair loop closes on the agent's own execution signal, so nothing external has to notice the drift.
  • McNemar p = 0.016. 7 queries improved, 0 regressed.
  • Verified by execution, not a judge model. Recovery is measured by running the SQL against a contamination-free held-out split.
  • No fine-tuning. The correction is targeted few-shot injection from the teacher at the moment drift is detected.
02
2026

Chiron teacher-guided reasoning transferINDEPENDENT RESEARCH

Reproducible harness for teacher-guided reasoning transfer on finance reasoning benchmarks. +5.21 pts under a pre-registered protocol, replicated at +6.0 on a second serving stack.

Teacher-guided transferReasoning eval harnessFinance benchmarksPython
RoleIndependent research
TeamSolo | Menlo Park
When2026
Context

Problem

A reproducible research harness for teacher-guided reasoning transfer on finance reasoning benchmarks. A teacher model supplies per-task guidance that lifts a student model's reasoning, with the gain measured against a no-plan baseline under a pre-registered protocol and confirmed by replication on a second serving stack.

What I did

  • +5.21 pts over a no-plan baseline. p = 0.031, pre-registered n = 40, 95% CI [+0.47, +9.76].
  • Replicated at +6.0 pts on a second serving stack. p = .001, 22 wins, 6 losses.
  • Pre-registered protocol. The metric and sample size were fixed before running, so the number is a test rather than the best slice of a search.
  • 11.2K lines, 217 tests, 105 commits.
03
2025

HokieTokie Amazon Nova Trusted AI1ST PLACE

Red-team side of Team HokieTokie. Built the attack taxonomy and the agent-driven pipeline that auto-generated the adversarial corpus used to train our defender model. 1st in Tournament 2 against Claude-3.7 Sonnet and CodeLlama-70B.

PyTorchTransformersAgent pipelinesAdversarial MLvLLMCodeGuru
RoleRed-Team Engineer
TeamTeam HokieTokie
WhenJan 2025 – Jun 2025
Context

Problem

Amazon and Together AI gave 10 teams a pretrained code-gen model and one job: make it resist prompt-injection and jailbreak attempts without over-refusing legitimate coding help. Teams went head-to-head in adversarial tournaments.

What I did

  • Built the attack taxonomy. Python vulnerability classes and adversarial patterns. Drove how the team generated training data across the project.
  • Agent-driven attack simulations. Attacker agent probes the defender, logs what gets through, pushes those failures back as training data for the next round. Cut hand-curating attacks out of the loop.
  • Adversarial corpus at scale. The attack-side data that fed the fused defender model and moved our Tournament scores.
  • Team placed 1st in Tournament 2, 2nd in Tournament 1, against Claude-3.7 Sonnet and CodeLlama-70B baselines.
04
2025

LLM Benchmarking Service AutoUnifySF | INTERN

Evaluation + model-selection layer for an AI coding-agent platform.

FastAPIPostgreSQLPytestJSON SchemaGitHub ActionsDocker
RoleSWE Intern (AI/ML) · LLM Optimization & Selection track
TeamTeam Wiseman · 3 eng
WhenMay 2025 – Aug 2025
Context

Problem

Different agent roles in AutoUnify's coding-agent pipeline needed different model behavior. Worker agents needed strong code generation and task completion. QA agents needed strict validation and deterministic output. Using the same model + prompt everywhere was unreliable, and prompt/parameter changes were landing in production without a way to tell whether they actually helped.

What I did

  • Role-specific model selection: scored models per agent role (worker vs QA) and found a model great at code gen over-refuses on QA, and vice versa. Standardized temperature, top-p, max tokens, and schema strictness per role, cutting manual prompt-tuning effort by ~25%.
  • Evaluation infrastructure on FastAPI + PostgreSQL. Stored benchmark runs, prompt versions, model outputs, p50/p95 latency, cost per 1K tokens, and schema-validation results, exposed through REST APIs that orchestration logic used to pick a model + config per role.
  • Observability for model selection: p50/p95 latency, cost/1K tokens, quality score, schema-adherence rate, and regression status logged per benchmark run.
  • Regression-safe CI/CD via Pytest, lint, JSON-schema checks, and benchmark thresholds in GitHub Actions. Blocked degraded configs before merge and improved merge velocity by ~20%.
05
2026

Housing Policy Predictor Virginia Tech / VCHRGRA | CURRENT

LLM + RAG pipeline predicting which housing affordability policies a jurisdiction is likely to adopt. Three policy classes, 6,809 knowledge chunks in ChromaDB, community profiling across five jurisdiction types. Graduate Research Assistant under Dr. Zhang.

ChromaDBLangChainFastAPILlama 3.3 70BTogether AIall-MiniLM-L6-v2
RoleGraduate Research Assistant
TeamVCHR | Dr. Ruichuan Zhang
WhenMar 2026 – now
Linkin progress
Context

Problem

U.S. jurisdictions trying to improve housing affordability have no good way to know which policies fit their local context. This system builds that match: given a jurisdiction's demographic and economic profile, predict which of the three policy classes it is likely to adopt.

What I did

  • LLM + RAG prediction pipeline over ChromaDB (6,809 chunks, all-MiniLM-L6-v2 embeddings). Two-pass retrieval: k=15 first pass, k=3 reranked. Llama 3.3 70B via Together AI with Groq fallback. Three policy classes: Density Bonus, ADU, Affordable Dwelling Unit Ordinances.
  • Community profile system segmenting jurisdictions into five types (rural low-income, urban high-cost, college town, suburban growing, others) to ground predictions in local context.
  • BPS data integration via flat-file parsing of the Building Permit Survey. Wage data sourced manually via BLS where APIs returned null.
  • 95 tests passing, BAD_COMPARABLE detection implemented. FastAPI backend on LangChain with evaluation across demographic slices.
  • Eval results (v1.2, query-level test set, n=18): 86.67% accuracy on the 15 classifiable queries (3 ambiguous excluded), 88.6% macro F1 across the three policy classes. Per-class P/R/F1: ADU 100/100/100, Affordable DU 83/100/91, Density Bonus 100/60/75. Ambiguity-handling pass rate 100%, evidence-backed rate 77.78%.
  • Known gap: retrieval recall@k not yet formally measured; evidence-backed rate is the current grounding proxy.
06
2025

CareRoute distributed healthcareCODEFEST | 4TH

36-hour sprint building a 6-microservice distributed health booking system communicating over JSON-RPC 2.0, deployed to AWS EC2.

FastAPIPostgreSQLDockerAWS EC2JSON-RPC 2.0
RoleBackend
Team4 devs
WhenOct 2025
Context

Problem

50+ teams, 36 hours, a brief to build healthcare infrastructure. We chose autonomous microservices to prove we could decompose and reassemble a real workflow under time pressure.

What I did

  • 6 autonomous microservices coordinating via JSON-RPC 2.0, deployed to AWS EC2 and validated against 12 end-to-end bookings.
  • 4th place + honorable mention among 50+ competing teams in 36 hours.
07
2024

Workflow Automation Colgate-Palmolive GBSPROD | 400+ USERS

Three FastAPI apps replacing the worst manual onboarding and permissions workflows. 400+ employees, 200+ hours/month saved.

FastAPIRedisAsync I/ORBAC
RoleProcess Automation Intern
TeamGBS ops
WhenJan 2024 – Jun 2024
Linkinternal
Context

Problem

Employee onboarding and permission ops were manual, slow, and error-prone. I owned three FastAPI apps replacing the worst offenders.

What I did

  • Shipped 3 FastAPI apps with role-based workflows. Saved 200+ hours/month across 400+ employees.
  • Cut response times from 30s to under 10s via Redis caching + async I/O while handling 1K+ daily interactions.
  • Observability dashboards for latency, error rate, throughput across all three services.
notes/ | technical journal

Short posts, real opinions.

no thought leadership, just receipts
2025-06| 3 min
#DPO#SFT#data-curation

Data beat algorithms on Nova

Our VT team spent a semester on the Amazon Nova AI Challenge. Secure code generation. Refuse the malicious prompts, don't over-refuse the benign ones, don't ship vulnerable code in between. Going in I thought the algorithmic choices would carry us. They mattered. But by the end the thing I kept learning, over and over, was that the data was doing most of the work and I'd been under-weighting it.

  • Security objectives fight each other. A model tuned hard on refusing malicious stuff gets worse at generating safe code for benign requests. You don't really see the trade-off until you're evaluating on both at once, and by then you've usually already made the mistake.
  • Static taxonomies stop helping after the first round. Attackers move. The work that actually paid off was the loop. Look at what broke, figure out why, generate more training data targeting it. Not glamorous. Worked.
  • I kept wanting to reach for architectural complexity. The simpler pipeline usually won. I think that's a pattern for me and not just this project.
takeawaypick data first
2025-08| 3 min
#LLM#codegen#workflow

Gates beat evals

Summer internship was LLM-heavy codegen. Give the system some vendor API docs, get back working integration code. Easy to pitch. Hard to ship without the model hallucinating something that breaks in review. I spent most of the summer on that second problem. What I landed on had less to do with smarter prompting and more to do with where I put the humans.

  • Full automation looks great in a demo and breaks in review. Every time I took out a review step because the model 'had it', I put it back a couple weeks later. That's not really a prompt problem, I don't think. It's a codegen-in-production problem.
  • Generating twice and picking beat generating once, even when 'once' was a stronger model. Honestly I don't know why that surprised me. It shouldn't have.
  • Hard deadlines on generation are underrated. Open-ended agent loops hide their failures in silence. A process that has to finish inside a bounded window fails loudly, which is mostly what you want.
takeawayhumans in the loop
2026-03| 5 min
#agents#LangChain#research

Agents over real APIs: what's hard, what isn't

The hard part of an agent over Census and HUD data is not making the model call a tool. That part is almost disappointingly easy. The hard part is everything around the tool: disambiguating addresses, choosing the right geography, handling missing fields, and proving the answer came from the right public source.

  • Tool calling is table stakes. The useful work is building source adapters with clear contracts, typed errors, and enough metadata for the model to recover when a lookup fails.
  • Real APIs are messy in ways demos hide. Rate limits, stale records, incompatible geographic units, and partial responses matter more than clever chain structure.
  • Evaluation has to include the boring cases. If the agent only works on clean inputs, it is not a policy recommender; it is a stage prop.
takeawaycontracts before autonomy
2025-09| 4 min
#LLM#MLOps#benchmarking

Benchmarking AI coding agents, not just models

AutoUnify's coding-agent pipeline had worker agents, QA agents, and review/resubmission agents, each needing different model behavior. Same model + same prompt everywhere was the easy default and it was wrong. Here's what I learned shipping a benchmarking layer that actually changed how the team picked models.

  • One model per role beats one model for everything. A model great at code gen over-refuses on QA. A model great at QA generates timid code. You only see the trade-off when you score both roles in the same run.
  • Latency matters more than the eval leaderboards suggest. p95 latency on QA agents determined whether the whole pipeline felt usable. We dropped two otherwise-strong candidates on p95 alone.
  • The CI/CD gate did more work than any individual benchmark. Before the gate, the failure mode was "someone tweaked a prompt on Friday, regression caught Monday." After: it didn't merge.
  • Cost tracking is boring and load-bearing. Prompts that score 2% higher and cost 4x more are not a win for an agent that calls the model 30x per task.
takeawayscore the role, not the model
history/ | checkpoints

Four stops, each production.

research labs | SF startups | global enterprise
shipped at every checkpoint
Mar 2026 – PresentBlacksburg, VA
Research Assistant
Virginia Tech | Dr. Ruichuan Zhang | Construction Informatics
Building an LLM-powered housing policy recommender over Census ACS + HUD datasets. LangChain tool-calling agents, FastAPI backend with modular data-source clients.
May 2025 – Aug 2025San Francisco, CA
Software Engineering Intern, AI/ML
AutoUnify | Series A | SF
Built an LLM benchmarking microservice (FastAPI + PostgreSQL) for an AI coding-agent platform. Tracked p50/p95 latency, cost/1K tokens, and schema-adherence across model + prompt variants. Added Pytest + JSON-schema regression gates in CI that cut manual prompt-tuning effort by ~25% and improved merge velocity by ~20%.
Jan 2025 – Jun 2025Blacksburg, VA
AI/ML Engineer, Nova Trusted AI Challenge
Virginia Tech | Team HokieTokie | Amazon x Together AI
Fine-tuned LLMs via SFT + DPO on 117K synthetic examples. Cut adversarial attack success 46% and placed 1st in Tournament 2 among 10 global teams. Outperformed Claude-3.7 Sonnet on safety benchmarks.
Jan 2024 – Jun 2024Mumbai, India
Process Automation Engineer Intern
Colgate-Palmolive | Global Business Services
Shipped 3 production FastAPI apps automating onboarding + permissions for 400+ employees. Cut response times from 30s to under 10s via Redis + async I/O. 70% automation rate, 200+ hours saved monthly.
metrics/ | subject profile

Capabilities matrix.

I finished my MS in Computer Engineering at Virginia Tech in May 2026 (3.71 GPA) with coursework across Advanced ML, Computer Vision, and Trustworthy ML.

Before grad school I was shipping automation at Colgate-Palmolive's global ops in Mumbai, the kind of boring but load-bearing work that teaches you to respect production.

Now I spend most of my time on applied LLM research: fine-tuning for safety, agentic systems over real-world APIs, and the evaluation infrastructure that keeps any of it trustworthy.

I care about systems that hold up under pressure, not just demos.

(contact)contact/ | open an issue

Let's build
something that holds.

Open to AI/ML new grad roles. Reach out and let's talk.

Email me