The problem
Voice agents shift state quickly. Voice alone is rarely enough for a strong user experience. On an outbound call—say placing an order or picking products—the agent must show matching visual cues and UI elements in real time. Shipping with confidence also means constant testing across customer profiles, accents, and intents.
We needed a two-fold solution:
- A voice-first agent that syncs verbal state with a visible UI.
- A unified evaluation platform that runs multi-turn chat and voice simulations and scores output without manual review.
Real-Time Voice-UI Synchronization
To link voice turns with on-screen app state, we built a custom orchestrator.
- WebSockets Sync: The orchestrator turns voice state changes—cart updates, checkout steps—into WebSocket payloads for the client.
- Live UI Rendering: The client renders cards, product grids, or forms from the agent's active LangGraph node.
- Interruption Handling: If the user cuts the agent off mid-sentence, the UI rolls back to the interrupted context.
The Agent Evaluation Platform
To test these agents at scale, we built a shared simulation and evaluation runner.
- Persona Simulation: A mock user agent chats or speaks with the bot using profiles like an angry shopper, a non-English speaker, or a failed-card checkout.
- LLM-as-a-Judge: After each run, a judge LLM scores the transcript on fluency, intent accuracy, relevance, and safety.
- Anomaly Detection & Tracing: The platform watches live metrics for phrase loops, drop-offs, latency spikes, and broken tool calls.
Platform-Agnostic Design
We decoupled agent logic from provider models with a shared configuration layer.
- Steps Configurator: Admins define nodes, transitions, and system instructions in a visual editor.
- Prompt Versioning: We track prompts in Git for rollbacks and side-by-side version tests.
