Voxel
Most voice-bot demos treat interruptions as something to smooth over so the conversation feels natural. Voxel does the opposite: it uses turn-detection as the actual product mechanic, deliberately cutting in on vague claims and hesitation the way a skeptical investor or buyer would, then scores the recovery through a second, independent LLM judge pass.
Problem
Pitch practice needs a counterpart willing to interrupt at the exact moment a claim goes soft — and a way to grade the recovery that isn't the same model marking its own homework.
Flow
A live call through four hand-tuned personas, followed by a decoupled evaluation pass that a separate LLM runs after the conversation is already over.
- 01Persona select — one of four counterparts (an aggressive investor, a technical co-founder candidate, a non-technical enterprise buyer, an impatient ROI-focused buyer), each a published AssemblyAI Voice Agent with its own turn_detection tuning (vad_threshold, min_silence, max_silence, interrupt_response) set to cut in on vague claims, unsupported numbers, and hesitation.
- 02Live call — the browser connects directly to the agent over a websocket using a short-lived token minted by the server; both the persona's conversational LLM and the later judge pass run through AssemblyAI's LLM Gateway, so the whole product needs one API key.
- 03Session retrieval — after the call, the session timeline (paired user/agent turns with timestamps) is pulled back, and the recording is run through sentence-level sentiment analysis as extra context.
- 04Judge pass — a separate LLM call that never took part in the conversation reads the full timeline plus sentiment signals and scores turn-by-turn recovery against a fixed JSON schema.
- 05Safety nets — a regex check strips any number in the judge's output that never actually appeared in the transcript, with automatic retry on invalid JSON/schema and backoff retry on rate limits.
Technologies
Notable decisions
Turn-detection as the product mechanic, not something to hide
Each persona's vad_threshold, min_silence, max_silence, and interrupt_response are tuned by hand so the agent interrupts at the same weak points a real skeptical investor or buyer would, instead of smoothing turn-taking into the background like most voice-bot demos do.
An independent judge, not the same model grading itself
The post-call score comes from a separate LLM call that never participated in the conversation and reads only the timeline and sentiment data — so the evaluation isn't the same model marking its own performance.
A hallucination safety net on the judge's own output
A regex check strips any number in the judge's suggested-response example that never appeared in the transcript, since the cheap model this project runs on will otherwise invent a plausible- looking figure out of nowhere — paired with automatic retry on invalid JSON/schema and backoff retry on 429 rate limits.
Self-play regression tests before ever using a microphone
tests/self_play.py runs the four real persona prompts against seven synthetic founder behavior profiles entirely through the LLM Gateway — no audio, no Voice Agent API — to catch persona-consistency regressions cheaply before a live call.
Result
Built solo for the AssemblyAI Voice Agent Hackathon (Sep 2026). 64 tests cover timeline parsing, the judge's output schema, and the hallucination/rate-limit safety nets, plus a handful of recorded edge-case sessions. Live demo hosted on Render's free tier.