VocalDocscontracts 1.65.0

TurnMetrics

The measurements of one Turn, without its text.

An object with 41 fields.

Fields

FieldTypeRequiredDescription
costTurnCost or nullnoThe Turn's share of the Call's cost estimate; null when the Call was not rated. Added in 1.5.0. From 1.29.0 (workspace ADR 0078, decision 7) the api sends it, in the Call and Turns reads, only to a reader that holds usage:read and omits it for any other, such as the viewer role; a reader treats its absence as null.
cut_sourceTurnCutSource or nullnoHow the reply was cut when the caller interrupted it (1.38.0, board #116): vendor_timestamps or estimate, which agrees with truncation_estimated. Null when the reply was not cut; a worker before 1.38.0 sends none, and a reader treats its absence as null.
decision_failoverboolean or nullnoTrue when a secondary Provider answered under its own thresholds. Added in 1.58.0: a reader treats its absence as null.
decision_msinteger or nullnoFrom the decision request to its verdict, a measurement; null when no lane ran. Added in 1.58.0: a reader treats its absence as null.
decision_statusDecisionStatus or nullnoThe status of the Turn's last verdict; null when no lane ran. Added in 1.58.0: a reader treats its absence as null.
decision_wait_msinteger or nullnoHow long before_model waited for a routing verdict, inside model_first_token; null when no routing set ran. Added in 1.58.0: a reader treats its absence as null.
echo_text_droppedinteger or nullnoCaller transcript segments the text-level echo check dropped as the Agent's own words; null on a leg without the check (web and app). Added in 1.20.0: a reader treats its absence as null.
ended_atTimestampyes
endpoint_fallbackbooleanyesThe end of turn came from the silence fallback, not the turn detector.
endpoint_msinteger or nullyesStage endpoint: last caller speech frame to the end-of-turn decision.
first_chunk_wait_msinteger or nullnoThe chunker's wait for the first speakable chunk, from the first model token; included in tts_first_byte_ms. Null when no model reply was spoken. Added in 1.20.0: a reader treats its absence as null.
interruptedbooleanyesThe caller interrupted the reply.
interruption_candidatesinteger or nullnoCaller speech starts while the Agent was speaking, each a candidate interruption. Added in 1.20.0: a reader treats its absence as null.
interruptions_suppressedInterruptionsSuppressed or nullnoNull when the worker counted none. Added in 1.20.0: a reader treats its absence as null.
languageLanguageTagyes
leading_silence_msinteger or nullyesLeading silence in the first reply audio; included in tts_first_byte_ms.
llm_providerProviderId or nullyes
model_first_token_msinteger or nullyesStage model_first_token: wait for the first model token.
object"turn"yes
policy_metricsTurnPolicyMetrics or nullnoThe hook timings of the Turn (1.48.0, roadmap slice 2.2): per hook dispatched in the Turn, the dispatches, the Policies evaluated and fired, and the summed and longest time in microseconds, with the Turn's pre-checks. Null when the worker counted none, as a worker before 1.48.0 does; a reader treats its absence as null.
render_hmacstring or nullnoHMAC-SHA256 of the instructions composed for the Turn's first model request (1.59.0, the field the worker reports from 1.58.0), so a reader compares two Turns' prompts without either text; null when none was composed or no key was held, and absent from an api before 1.59.0.
retrieval_msinteger or nullnoHow long before_model waited for the context retrievals of the Turn, the longest of them, a measurement in milliseconds; null when no context binding applied. Added in 1.53.0: a reader treats its absence as null.
retrieval_passagesinteger or nullnoHow many passages entered the model request as keyed context entries; null when no context binding applied. Added in 1.53.0: a reader treats its absence as null.
retrieval_skippedboolean or nullnoTrue when a context retrieval of the Turn missed its budget_ms or failed and the request went out without its passages; null when no context binding applied. Added in 1.53.0: a reader treats its absence as null.
route_abortboolean or nullnoTrue when a verdict that changed the speaker state landed while the model request had produced nothing yet: the request was closed at its first chunk with text or a Tool call, before any audio (the reading of 1.59.0), and a request was composed for the new state; its tokens are still metered. Added in 1.58.0: a reader treats its absence as null.
route_lateboolean or nullnoTrue when a verdict routed after the request produced its first chunk: the machine stepped when the verdict landed (the reading of 1.59.0), and the new state reached the model from the next request. Added in 1.58.0: a reader treats its absence as null.
seqintegeryesThe Turn number in the Call; 0 is the greeting, whose caller stages are null.
speakersarray or nullnoThe Agents whose model produced the reply, in order, with the version each ran: more than one after a handoff inside the Turn; null when only the root Agent spoke. Added in 1.58.0: a reader treats its absence as null.
stage_providersTurnStageProviders or nullnoWhich Providers served each stage of the Turn, in the order they served it (1.35.0, board #94). Absent or null means one Provider served every stage throughout, the one stt_provider, llm_provider or tts_provider names, as in every Turn before 1.35.0; a stage that is absent from the object was served by one Provider too. A stage is listed when its chain switched Provider during the Turn, and may be listed with one entry. Each entry names the Provider, the model, the id of the credential key it ran on (a plk_ or pcr_ id, null when the worker holds no key id for it; never the secret or its hint), the loss that moved the stage to it, and the quantity it handled in the unit the Usage events rate the stage by. To rate the Turn, take the quantities of a stage's entries as parts of the Turn's usage quantities for that stage and rate each part under its entry's Provider and model; rate any remainder, a quantity of usage that the entries do not account for, under the Provider that stt_provider, llm_provider or tts_provider names, as a Turn without this field is rated.
started_atTimestampyes
statesarray or nullnoThe stable speaker states of the Turn in order: the one it began in and each one entered during it; null for the implicit machine. Added in 1.58.0: a reader treats its absence as null.
stt_final_msinteger or nullyesStage stt_final: further wait for the final transcript.
stt_providerProviderId or nullyes
tool_metricsTurnToolMetrics or nullnoThe Tool loop of the Turn (1.49.0, roadmap slice 2.3): rounds, invocations, failures, their time and the tool_loop_cap tag. Null when the Turn ran no Tool; a worker before 1.49.0 sends none, and a reader treats its absence as null.
transport_msinteger or nullyesStage transport, from an external measurement only.
truncation_estimatedbooleanyesThe heard reply text was cut at an estimated point after an interruption.
tts_first_byte_msinteger or nullyesStage tts_first_byte: wait for the first audible reply frame.
tts_providerProviderId or nullyes
unattributed_msinteger or nullyesTime an external measurement could not attribute to a stage.
usageTurnUsage or nullnoThe quantities the worker counted; null when it reported none. Added in 1.5.0: the api always sends it, and a reader treats its absence as null.
voice_to_voice_internal_msinteger or nullyesThe sum of the four worker stages.