Metrics

Every run collects metrics from the transport layer (timestamps around the HTTP call, the audio frames, the SIP events), never from a model. They appear in result.json, in the summary, and metric: assertions compare them.

MetricTargetsDefinition
turn_latency_ms (_p50, _p95, _max)rest, livekit, sip, realtimeuser turn sent → agent turn complete
time_to_first_token_msrest (sse, websocket), realtimeuser turn sent → first delta
time_to_first_audio_mslivekit audio, sip, realtime audiouser speech end (VAD, or the audio commit) → agent speech start
stt_mslivekit audio, sip, twilio, voiceagent audio over → tamesu’s transcript of it ready: the speech layer’s own time, not the agent’s; small when the STT model transcribes the audio as it arrives
interruption_stop_mslivekit audio, sip, realtime, pipecat, twilio, voiceuser starts talking over the agent → agent audio stops (its cancel, clear or interruption signal, or the end of the audio it had queued)
interruptionslivekit audio, sip, realtime, pipecat, twilio, voicehow many times the caller talked over the agent (behaviors.interrupt_probability)
talk_over_ratiolivekit audio, sipoverlapping speech time / total agent speech time
silence_gap_max_mslivekit audio, siplongest dead air while a reply was expected
call_setup_mssipdial (or trigger, inbound) → call active
ring_mssipringing → answered
greeting_mssipcall active → agent’s first speech
call_duration_mssipactive → hangup
stt_word_error_ratelivekit audio, sipthe agent’s transcript of the caller vs. the text tamesu synthesised (only when the agent publishes one)
turnsconversationalnumber of agent turns
goal_stepsbrowseragent steps used per goal
llm_cost_usd, llm_tokensalltamesu’s own model spend during the run
http_requestsrestrequests of the session

Per-turn metrics

A metric measured on every turn (turn_latency_ms, time_to_first_token_ms) is published as its mean under the plain name and as _p50, _p95 and _max; the percentile is the nearest-rank value of the run’s turns. Assert on _p95 for a latency budget: one slow turn should not fail a test, a slow conversation should.

- metric: { name: turn_latency_ms_p95, lt: 4000 }
- metric: { name: turn_latency_ms_max, lt: 10000 }

Cost metrics

llm_cost_usd and llm_tokens are what the run’s own model calls cost. They are exact when runs do not overlap and approximate under --parallel, where a concurrent run’s calls may be counted against a neighbour; the summary’s total is always exact.

Variance

repeat: 5 runs a test five times and the metrics are recorded per run; pass_threshold: 0.8 lets one slow or wrong run through. Compare result.json across runs to see the spread.