Skip to content

turn-detector-v1: high eot variance on short utterances — guidance on tuning for short affirmations? #6415

Description

@Propconnect-ai

Bug Description

Context

I run a production voice agent for lead qualification (currently on another platform) and was evaluating LiveKit. While reading the debug logs from two console sessions I noticed something I'd like to understand better before building on it.

This is a question, not a bug report — I may well be misreading the design intent.

What I observed

turn-detector-v1, English, unlikely_threshold: 0.56, no overrides.

The same word, spoken twice, in two sessions — same microphone, same room:

Utterance eot probability threshold endpointing_delay
"Hello?" (session 1) 0.477 0.56 2.5 s
"Hello?" (session 2) 0.650 0.56 0.3 s

Identical input, opposite sides of the threshold, ~8× difference in wait before the agent responded.

Two semantically identical affirmations, same session:

Utterance eot probability endpointing_delay
"Yeah." 0.127 2.5 s
"Yes." 0.649 0.3 s

"Yeah." scored 0.127 — the model was ~87% confident the turn had not ended, when it plainly had. It waited 2.5 seconds.

And one that cleared by a rounding error:

Utterance eot probability threshold margin
"I'm not sure." 0.5613 0.560 +0.0013

Why I'm asking

A qualification call is largely short affirmations — yeah, okay, sure, right, correct, no. If the score distribution for those straddles the threshold, a meaningful fraction of turns will fall below it and trigger the full 2.5 s endpointing delay.

On a phone call with a stranger, 2.5 s of dead air after they say "yeah" doesn't read as thoughtfulness — it reads as the line dropping. Callers start talking over the agent or hang up.

I'm not claiming the model is wrong. Short utterances genuinely carry less prosodic and lexical signal, and I don't know what the training distribution looked like. But the variance appears highest on the shortest and most frequent utterances in a real call, which is where it matters most.

Questions

  1. Is this variance expected on very short utterances, or does it suggest something wrong with my setup?
  2. The config exposes "overrides": null alongside the per-language thresholds. Is per-language (or per-use-case) override the intended lever here? I couldn't find guidance on when or why to reach for it.
  3. Is there a recommended pattern for turn-taking in short-answer-heavy flows (qualification, IVR-style, yes/no gating) — a lower threshold, a shorter endpointing_delay, or something else entirely?

Happy to gather more data across languages if that's useful — I run Hindi/English bilingual agents, and I noticed hi: 0.575 is tuned separately, which suggests someone has already thought hard about this.

Expected Behavior

Identical or near-identical utterances should produce comparable eot scores.

"Hello?" scoring 0.477 in one session and 0.650 in the next — same word, same
microphone, same room, same config — puts the same input on opposite sides of the
0.56 threshold and produces an 8x difference in response delay (2.5s vs 0.3s).

I'd expect either:
(a) more stable scoring on short utterances, or
(b) documented guidance on tuning for short-answer-heavy flows, since the variance
appears highest on the utterances most common in real qualification calls.

Reproduction Steps

1. lk app create --template agent-starter-python <name>
2. uv sync
3. uv run src/agent.py console   (no config changes, stock template)
4. Say "Hello?" — note eot probability and endpointing_delay in the debug log
5. End session, restart, say "Hello?" again — compare
6. Within one session, say "Yeah." and then "Yes." — compare

Operating System

Windows 11 (console mode, local)

Models Used

Stock agent-starter-python defaults, all via LiveKit Inference: - STT: deepgram/nova-3 (language: multi) - LLM: google/gemma-4-31b-it - TTS: cartesia/sonic-3 - Turn detection: turn-detector-v1 (thresholds: en 0.56, hi 0.575; overrides: null)

Package Versions

livekit-agents 1.6.5
livekit-rtc 1.1.13
livekit-plugins-ai-coustics 0.3.0

Session/Room/Call IDs

Console mode (local) — mock-job-e675b127a1ef, mock-job-054d4e0446a2
No cloud room IDs. Happy to reproduce in a cloud session if that's more useful.

Proposed Solution

Additional Context

No response

Screenshots and Recordings

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions