
Use case / Voice agents
Find the pause that lost the caller.
Voice agents live or die by delay. Time each turn through speech recognition, the model and speech output, and the slow step is obvious.
- Turns
- Timed
- First token
- Measured
- Tool waits
- Visible
Turn timeline
Where the pause came from.
Each call is a trace with one run per turn.
Recognition time is separate from model time.
Time to first token tells you how fast the reply started.
A slow tool call shows up as the longest bar in the turn.
Compare turns to see which ones callers waited on.
- 01ok
Caller speaks
Audio received, 3.2 seconds long.
- 02ok
Transcript ready
Speech recognition took 410 ms.
- 03ok
Model thinking
First token after 700 ms.
- 04slow
Tool wait
Order lookup took 1.9 seconds.
- 05ok
Reply spoken
Speech output started after a long gap.
What you get
What Tracify watches.
Turn latency
01Recorded on every run, so it can be searched, compared and alerted on.
Time to first token
02Recorded on every run, so it can be searched, compared and alerted on.
Interruptions
03Recorded on every run, so it can be searched, compared and alerted on.
Tool wait
04Recorded on every run, so it can be searched, compared and alerted on.
Instrument it
Time every turn of the call.
Put speech recognition, the model and speech output in separate spans and the slow part of a turn is obvious.
$ npm install tracify-sdk
import { span, traceAgent } from "tracify-sdk";
export const handleTurn = traceAgent(async (audio: Buffer) => {
const text = await span("transcribe", () => speechToText(audio), { type: "tool" });
const reply = await span("think", () => callModel(text), { type: "llm", input: text });
return span("speak", () => textToSpeech(reply), { type: "tool" });
}, { environment: "production" });
The failure to catch
A two second silence that made the caller hang up.
Trace speech recognition, model and speech output for each turn so slow or broken moments show up as steps, not guesses.
