Voice Agent Quality Index (VAQI)
An AI voice agent can pass every offline eval and still feel slow to live callers. VAQI is the live-session complement to evals: it aggregates per-session quality records your voice agents emit on every call and rolls them up into latency, turn-taking, and barge-in metrics over a time window you pick — 24 hours, 7 days, or 30 days. Use it to answer “how is the fleet doing right now,” not “does this agent build pass its tests.” Base path:/api/v1/voice
Authentication: Clerk session (Authorization: Bearer <token>) or API key (X-API-Key).
Scope: voice read. Dashboard page: Voice → Voice Agent Quality (available to owners, admins, and developers).
1. What VAQI measures
Every completed AI voice session produces one record: duration, turn count, the time the agent took to start responding, the silence between caller and agent turns, speech-to-text / LLM / text-to-speech processing time, and how interruption (barge-in) behaved. VAQI returns:sessions— sessions in the windowavg_session_duration_ms/avg_turns_per_sessionavg_ttfb_ms,p95_ttfb_ms— time-to-first-byte: how fast the agent starts speaking after the caller’s turn endsavg_turn_gap_ms,p95_turn_gap_ms— the silent gap between turns across the sessionavg_stt_ms,avg_llm_ms,avg_tts_ms— pipeline stage averagesbarge_in_rate— % of turns where the caller interrupted the agentbarge_in_success_rate— % of those interruptions where the agent yielded cleanlydaily[]— per-day breakdown of sessions, average turn gap, and average TTFB
2. Reading the three KPI families
Latency (ms) — TTFB is the number callers feel first. The dashboard flags a warning when the p95 exceeds 1,200 ms. Splitting the pipeline (STT vs LLM vs TTS) tells you which stage drifted: a TTFB spike with a flat STT and TTS but an elevated LLM average points at the model, not the speech pipeline. Turn-taking (turns + gaps) —avg_turns_per_session shows whether conversations are real exchanges, and the turn gap measures the dead air between them. The dashboard warns when the p95 turn gap exceeds 1,500 ms. A rising gap with a stable TTFB usually means longer generations later in the session, so check your prompt length and tool call sizes.
Barge-in (interruptions) — barge_in_rate is the share of turns the caller talks over the agent; barge_in_success_rate is the share of those where the agent stopped cleanly. Some interruption is healthy — callers probe and correct. A high rate with a low success rate means callers are fighting a talking-over agent.
Example thresholds that match the dashboard warning markers:
3. Picking a window and comparing agents
Choose the narrowest window with enough sessions to make the averages meaningful:- 24h while tuning a prompt or model change.
- 7d for the operating baseline (the default).
- 30d for trend review.
daily[] rows across the days each was live, or route each agent through a comparison window of its own for a clean read. The dashboard page refreshes every 30 seconds, so a shared screen on the 24h window works as a live wallboard.
4. Alert thresholds — and how VAQI differs from evals
Wire alerts on the two p95 warnings above; filter small-sample noise by only alerting when the window has enough sessions. Evals and VAQI answer different questions, and you need both:- Evals run offline against recorded or scripted conversations — they answer “did the agent say the right thing.”
- VAQI is computed from live sessions — it answers “does the agent feel fast and polite to real callers right now.”
5. Who reads it
- Operations watches p95 TTFB and turn gap and owns the alert thresholds.
- Agent builders own the pipeline split (STT/LLM/TTS) and barge-in behavior — a regression maps back to a prompt, model, or voice configuration change.
6. Troubleshooting
- Latency spikes after a deploy: compare the stage averages against your baseline. If the LLM average moved, the prompt or the model changed; if STT/TTS moved, the speech configuration changed.
- Cold models: the first sessions of the day can carry a higher TTFB while the speech and model pipeline warms; widen to the 7d window before you treat it as a regression, and read
daily[]to see whether today’s row is the only offender. - High barge-in with low success: the agent is not yielding — shorten end-of-turn sensitivity or the first response length.
- All zeros: either no AI voice sessions completed in the window, or the rollup cache was briefly unavailable. If call volume is running but VAQI still returns zeros, retry — the fall-back is deliberately zero-shaped so the page renders.
Read VAQI from the API
GET /api/v1/voice/vaqi returns the tenant-wide rollup the dashboard renders. The days parameter (integer, 1–30; default 7) picks the window — pass days=1, days=7, or days=30 to match the three dashboard presets. Any API key or session with voice read scope can call it.
cURL
Node.js
client.voice.vaqi.get() helper, so there is no need for the generic client.request() escape hatch. The result is the full { data, meta } envelope — slice through .data for the metrics below. Python readers reach the same route through the escape hatch:
Python
Fields and dashboard thresholds
Map each response field to the warning marker the Voice → Voice Agent Quality page uses:
Only the two p95 markers produce the warning highlight; the rest of the fields give you the pipeline split to read when one trips.
Worked example
GET /api/v1/voice/vaqi?days=1
What the dashboard panel shows
Voice → Voice Agent Quality renders the same rollup: a sessions, duration, TTFB (avg/p95), and turn-gap (avg/p95) KPI row that highlights in a warning colour past the thresholds; a pipeline split (STT / LLM / TTS); barge-in rate and barge-in success cards; and the per-day breakdown table. A window switcher (24h / 7d / 30d) is part of the URL, so you can deep-link a specific window.Related: AI agent evals · Call QA scorecards · AI agent outbound calls · Blog explainer: how to read VAQI