Selected work · AI · Evaluation platform · 3 min read
Making voice bots debuggable, then making them improve themselves
Built from zero to production in three months: triage from ~30 minutes to under a minute, and per-bot delivery from about a week to 1–2 days.
TL;DR
- Built Argus: debug any voice-bot call with one command, from Google Chat, a CLI or a REST API.
- Built AutoLoop on top: a build loop for new bots and a 7-stage, human-gated improve loop for live ones.
- Triage went from ~30 minutes to under a minute; bot delivery from about a week to 1–2 days (estimate).
- Role
- Designed and built end to end: Argus as a GenAI intern, AutoLoop and the voice simulator as FDE
- Team
- Exotel voicebot platform
- Timeline
- Feb 2026 – Present
- Links
- Internal work; no public links
- Chat sim
- Voice sim
- Real calls
How it fits together
Build loop · before go-live
- requirements.md
- Eval-suite scenarios
- Baseline + 4 prompt techniques in chat sims
- Lock the winner
- Iterate on failures
- Voice sims → real calls
Improve loop · live bots, 7 stages(loops; regressions roll back)
- 1 Evaluate
- 2 Investigate
- 3 Recommend
- Human approval
- 4 Apply
- 5 Verify
- 6 Compare
- 7 Journey
Context
Voice bots fail in ways that are slow to find: latency, speech recognition, prompt drift, tool errors, platform fallbacks that look like the bot misbehaving. Engineers dug through recordings and logs one call at a time.
Argus: one command to debug any call
A FastAPI service I built from scratch and shipped behind a load balancer with a Jenkins rolling deploy and automatic rollback. It answers in Google Chat, from a CLI and over a REST API.
Give it any call identifier and it pulls metrics and logs from two OpenSearch clusters, the bot's configuration from the platform API, and the recording from S3, then explains what happened.
- Perceived latency measured from the recording itself (energy-based VAD + Gemini audio analysis): the gap the caller heard, not the gap the logs claim.
- Disconnect attribution that cross-checks the platform's “who hung up” against error logs and transport events.
- Recordings playable without VPN through an HMAC-signed proxy with per-account token derivation.
- A natural-language mode: Gemini Flash with 16 function-calling tools and per-thread memory, so follow-ups need no IDs.
- A daily Splunk On-Call alert digest, file-locked across workers.
AutoLoop, part 1: building a bot before go-live
The loop I run on every new bot, packaged so any FDE can run it from Cursor or Claude Code:
- Generate requirements.md for the bot from the customer's requirement document.
- Generate the scenarios: the eval suite the bot has to pass.
- Write a baseline prompt and four other prompting techniques (compact, decision table, chain-of-thought, persona-driven), run all five in chat simulations against the real bot runtime over WebSocket, and lock the technique that passes the most scenarios.
- Iterate: analyse failing transcripts (thinking-tag leaks, stalls, language mismatch, missing empathy), make a targeted prompt edit, re-run. Usually 2–4 rounds; one documented CCTV-support bot went from a 30% to an 85% behavioural score in 3.
- Validate with voice simulations on the in-house voice simulator, then real calls. Every run ends in a report and a PDF.
AutoLoop, part 2: improving bots already in production
Seven stages with a human approval gate in the middle. Nothing is applied without a person saying yes.
- Evaluate: benchmark sampled production calls on 8 deterministic and 6 LLM-as-judge dimensions (plus 12 use-case ones). Platform health is classified first, across 11 infrastructure failure patterns, so an outage never gets blamed on the prompt.
- Investigate: five data streams per call, a per-turn “was this actually LLM-generated?” check, one root-cause tag per call, and log lines traced back to the source code that emitted them.
- Recommend: six preflight gates (sample-size confidence, same-config evidence, grounding in a specific call and turn) before proposing an exact before/after diff to one prompt layer.
- Apply: after approval, a drift check, then a new assistant version with the actor recorded.
- Verify: re-benchmark only calls after the change (time-fenced), so old calls can't pollute the score.
- Compare: per-dimension deltas marked improved, stable or regressed; a regressed composite means roll back.
- Journey: a version-by-version audit of what changed, when, and by whom.
Packaging
AutoLoop ships as 20+ agent skills in all (stage skills, simulation skills and model-specific prompt skills for Gemini Flash, Gemma 4, GPT-4.1-mini and Qwen 3; 16 of them call the platform's REST APIs), an argus.sh CLI with about 30 commands, and an idempotent installer. Argus also hosts the CallEvaluator and ProdBotRecommender pipelines and a nightly evaluation harness.
Build log: Argus and AutoLoop, Feb – May 2026
Hover a step to see where it happened in the diagram above.
- Feb 2026pass
Argus launches as a Google Chat bot over the metrics cluster
- Mar 2026pass
Call details, perceived-latency analysis, root-cause analysis, recording proxy, alert digest, natural-language mode
- Apr 2026pass
AutoLoop: simulate, approve, reject, roll back; evolutionary (GEPA) prompt optimisation with auto-rollback; ~75% lower simulation cost
- May 2026fail· 1 Evaluate
An earlier loop recommended a prompt fix and a longer timeout for a bot that “refused” every request. The LLM endpoint was returning 404 on every call; the refusals were platform fallbacks.
- May 2026fix· 2 Investigate
Added platform-health classification and the investigate-before-recommend gates; hardened into 8 invariants enforced in code and skills
- May 2026pass
Journey audit, version-fenced benchmarks, pre-deploy simulation pipeline
Results
~30 min → <1 min
triage per issue
Conservative, from the work record
~1 wk → 1–2 d
per-bot delivery
Estimate across 10+ builds
500+ · 79
commits · merged PRs
Argus repo: 514 commits and 79 merged PRs in Feb – May 2026 alone, more since
30% → 85%
behavioural score in 3 iterations
One documented CCTV-support bot, simulations
~75%
lower simulation cost
Scoring 6 instead of 23 metrics; simulation cost only
~42K → ~19K
prompt characters, one banking client
Simulated time-to-first-word ~900 → ~450 ms (simulated, not production)
Designed and built by me, Aryan Jaiswal: Argus, AutoLoop, the simulation pipeline, the in-house voice simulator, and the CallEvaluator and ProdBotRecommender pipelines Argus hosts.
What I'd do differently
- Define the eval metrics before building the tooling around them.
- Classify platform health from day one; I learned that one from the May incident.
- Invest in the voice simulator earlier, because chat simulations miss audio-level failures.
Stack
- Python 3.11
- FastAPI
- Gemini (Pro + Flash)
- LangGraph
- OpenSearch
- AWS S3 / SES
- SQLite
- WebSockets
- Google Chat API
- Splunk On-Call
- Jenkins
- numpy / ffmpeg