Possible audio TurnDetector cancellation stall in Python Agents 1.6.4

Hi LiveKit team,

We have been observing repeated end-of-turn stalls in a production Arabic/English session using:

  • livekit-agents==1.6.4
  • inference.TurnDetector() using the Cloud v1 model
  • Soniox stt-rt-v5 with English/Arabic hints and diarization
  • Silero VAD with 0.7s minimum silence
  • endpointing min/max of 1.8s/2.7s
  • preemptive_generation=True
  • allow_interruptions=False

Our watchdog arms only after user_state transitions from speaking to listening, so VAD had already emitted end-of-speech. Despite that, six turns did not commit for 10.5s, 23.3s, 26.1s, 16.3s, 10.5s, and 86.5s. These turns emitted no EOU metric and generally resolved only when the user spoke again.

Routine model latency does not explain this: median LLM TTFT was 0.62s and p90 was 0.90s.

This appears related to PR #6274, which says EOT cancellation could be triggered by inference completion and become flaky under background noise. Can you confirm whether 1.6.4 is affected and whether upgrading to 1.6.5 should address this pattern?

The documentation says an audio detector prediction timeout should commit the turn after about one second and fall back from v1 to v1-mini. That did not appear to occur. Which logs or callbacks can expose:

  • active detector version (v1 vs v1-mini)
  • prediction request/cancellation IDs
  • timeout/fallback events
  • the reason a turn remained uncommitted after VAD end-of-speech?

We also saw speech dropped with “current speech generation cannot be interrupted.” Since interpretation output should finish but patient speech must not be lost, is allow_interruptions=False with discard_audio_if_uninterruptible=False the intended configuration?

We can provide a sanitized audio reproduction and detailed logs through our Slack channel if needed. Would you recommend 1.6.5 with the audio detector, or turn_detection="vad" as the temporary mitigation? We are downgrading back to MultilingualModel for now until this is resolved.

@Alexander_Mehregan, Your understanding is correct, and the versioning is definitive. PR #6274 dropped the flaky path: EOT cancellation used to be triggerable by the inference-done event, which background noise made unreliable, and it now keys only on STT/VAD start-of-speech (#6274). That commit is not in 1.6.4 but is contained in 1.6.5 (released 2026-07-09), so 1.6.4 is affected and 1.6.5 is the targeted fix for exactly your pattern. Upgrade there first rather than dropping to turn_detection="vad", which loses the semantic model.

On the config, your intent is right: audio is only discarded when the speech is uninterruptible AND discard_audio_if_uninterruptible=True (agent_activity.py#L1193), so allow_interruptions=False with discard_audio_if_uninterruptible=False preserves the patient’s audio. The “cannot be interrupted” log is expected under that setting; the reply is skipped while the agent speaks but the transcript is still captured, so it is not the stall.

If 1.6.5 still shows uncommitted turns, that is the point to share the sanitized repro and logs, since the rest is session-specific.

Just so it’s publicly visible, also responded to your internal DM on Slack. As Muhammad says above, I suggest testing with 1.6.5 and we can investigate further if the issue is still present.