An AI voice agent interrupts because a fixed silence timer, not meaning, decides the caller has finished. LiveKit Agents 1.8.1 stops waiting after 550 ms of silence on stock defaults; Pipecat 1.10.0’s silence-timer strategy waits 800 ms; Vapi waits 0.4 s. Human speakers answer each other in +208 ms on average, so every caller pause longer than your threshold is read as a finished turn.
The demand is public and specific. The HighLevel ideas board carries Stop AI Voice from Interrupting with 145 votes, status Complete, in the reporter’s own words: I’m having a problem where the ai voice and the caller are always talking over each other, and the ai sometimes cuts off the caller.
HighLevel’s staff reply closed it with Added Interruption Sensitivity that can be tweaked
; the 0.75 default is stated by a commenter underneath, not by HighLevel (ideas.gohighlevel.com, checked 12 September 2026). Retell AI, Vapi, Pipecat, Deepgram Flux and LiveKit expose the same class of control under different names and defaults — and, the part that costs people days, they do not compose those numbers the same way.
“My AI voice agent keeps cutting callers off” — what is actually happening
The agent cuts the caller off mid-sentence. This is end-of-turn detection, or endpointing. The caller paused — to read a policy number off a letter, to translate a phrase, to think — and the silence ran past the threshold, so the agent treated the pause as a completed turn. Nothing was wrong with the audio. A fixed timer cannot tell “I’m thinking” from “I’m finished”; it has no access to meaning.
The agent stops dead when the caller says “mm-hmm”. That is barge-in, the opposite subsystem: while the agent speaks, any detected caller speech counts as an interruption, so an acknowledgement never meant to take the floor kills the sentence. Pipecat’s documentation names it — interruptions are enabled by default
, and the remedy is to Require a minimum number of words so short utterances like “okay” or “yeah” don’t interrupt the bot
.
If the agent goes quiet instead, that is a different fault — see why an AI voice agent goes silent during tool calls.
Turn-detection defaults across six named platforms
Every figure below is from that project’s own source or docs at the version stated, checked 12 September 2026: LiveKit turn.py, Silero vad.py, Pipecat user turn strategies, Vapi speech configuration, Retell create-agent, Deepgram Flux configuration.
| Platform (version) | End-of-turn wait, stock | Barge-in gate while the agent speaks | How the numbers compose |
|---|---|---|---|
| LiveKit Agents 1.8.1 + Silero VAD | min_delay 0.5 s, max_delay 3.0 s, mode “fixed”; Silero min_silence_duration 0.55 s |
min_duration 0.5 s, min_words 0, false_interruption_timeout 2.0 s, backchannel_boundary (1.0, 1.0) |
max() — measured from true end of speech, so 0.55 s wins |
Pipecat 1.10.0 SpeechTimeoutUserTurnStopStrategy (opt-in, not the shipped default) |
VAD stop_secs 0.2 s, then user_speech_timeout 0.6 s |
interruptions on by default; MinWordsUserTurnStartStrategy(min_words=n) |
sum — the 0.6 s timer starts on the VAD stop frame, so 0.8 s from the true end of speech |
Pipecat 1.10.0 Smart Turn (LocalSmartTurnAnalyzerV3) — the shipped default |
model prediction, stop_secs 3 s backstop |
same start strategies | model first, timer only if it never says complete |
| Vapi (docs, 12 Sep 2026) | waitSeconds 0.4 s; onNoPunctuationSeconds 1.5 s when punctuation is absent |
numWords 0, voiceSeconds 0.2, backoffSeconds 1 |
smart endpointing off by default; falls back to the transcriber |
| Retell AI (API reference) | responsiveness 1 — higher value means faster exchanges (respond when it can) |
interruption_sensitivity 1 — When this is set to 0, agent would never be interrupted |
both default to the top of their own [0,1] scale |
| Deepgram Flux | eot_threshold 0.7 confidence; eot_timeout_ms 5000 backstop |
n/a — Flux reports the turn; the framework acts | confidence first, the 5 s timeout as a ceiling on the wait |
| HighLevel Voice AI | not published as a millisecond value in HighLevel’s Voice AI help article or on its ideas board as at 12 September 2026 | Interruption Sensitivity; 0.75 default reported by a commenter on HighLevel’s own board, not stated by HighLevel | single dial |
The binding-threshold rule: your real wait is not the number you set
Call this the binding-threshold rule: the wait your caller experiences is a composition of at least two thresholds, and you must know whether your stack takes the maximum of them or the sum before you turn either dial.
On LiveKit Agents 1.8.1 it is the maximum. The endpointing timer is anchored to the real end of speech — the code back-dates it by subtracting the accumulated silence and inference time — then sleeps until that anchor plus min_delay. Silero has already spent its min_silence_duration of 0.55 s by then. So the stock floor is max(0.55, 0.50) = 0.55 s, and lowering min_delay from 0.5 to 0.3 changes nothing at all: the VAD silence window sets your floor. Note too that at 1.8.1 min_endpointing_delay, max_endpointing_delay, min_interruption_words and allow_interruptions are deprecated in favour of “turn_handling=TurnHandlingOptions(…)”, so much of the tuning advice online sets arguments on a deprecation path.
Pipecat 1.10.0 does both, and which binds depends on the timer. Its SpeechTimeoutUserTurnStopStrategy starts a 0.6 s user_speech_timeout on the VAD stop frame, which the VAD only emits after 0.2 s of stop_secs silence: that path sums to 0.8 s from the true end of speech. Its STT safety-net timer is the opposite — the same file computes effective_stt_wait = max(0.0, self._stt_timeout - self._stop_secs), and the docs say of it These don’t stack
. Two cautions. That 800 ms is not Pipecat’s shipped default: default_user_turn_stop_strategies() returns a turn model, TurnAnalyzerUserTurnStopStrategy(LocalSmartTurnAnalyzerV3()), and the silence timer is opt-in. And stop_secs is not your knob — it is a low-level detection threshold — leave it alone. To change wait time, use the stop strategy, not
.stop_secs
Same two numbers, two frameworks, a 250 ms difference in what your caller hears — and inside one of them, two compositions at once. That is why “set the silence threshold to 800 ms” is not portable advice.
The split-turn test: which of the four causes you have
Causes one and three sound identical on the recording. Pull the structured turn log and run this test on the turns that drew the complaint.
- Is a caller transcript attached to the interrupted agent turn? If none, or a phantom one, go to cause 3.
- Is the transcript only an acknowledgement — yeah, okay, mm-hmm, uh-huh, right? Cause 2, barge-in sensitivity, not endpointing.
- Does the caller turn split into two fragments with the agent reply between them, the second completing the first (“my member number is four seven…” / agent speaks / “…two nine”)? That is cause 1, endpointing. Count these per hundred calls — that rate is the number you are trying to move.
- Did the caller state flip to speaking while the agent talked and the caller was silent? Cause 4, a VAD false positive on the agent’s own audio.
Build it into the pre-launch pass in how to test an AI voice agent before go-live, with one scripted call that pauses deliberately mid-number: unscripted test calls do not reproduce it reliably.
What every extra millisecond of patience costs
Patience is not free. Work the cost end to end.
Step 1 — the human baseline. Stivers et al., Universals and cultural variation in turn-taking in conversation (PNAS, 2009), measured ten languages: modal response offset 0 ms, cross-linguistic median +100 ms, mean +208 ms, Japanese fastest at +7 ms and Danish slowest at +469 ms.
Step 2 — the gap you start from. A 550 ms floor is already about 2.6 times the human mean, before speech-to-text finalisation, the model’s first token or the first byte of audio from your voice provider — see why sub-second voice AI latency matters for how those stack.
Step 3 — the multiplier. The threshold is paid on every caller turn, not only the turns it rescues. On a call with seven caller turns, moving the floor from 550 ms to 1,200 ms adds 650 ms × 7 = 4.55 s of dead air, landing as an extra two-thirds of a second after every answer, including “yes”.
Step 4 — the asymmetry nobody accounts for. In the same dataset, within the set of answers, confirmations were delivered faster than disconfirmations in all ten languages, between 100 and 500 ms faster on average — a difference the authors report as reaching significance in 7 of the 10. That measures how fast a person starts answering, not how long they pause mid-answer, so treat what follows as our inference, not the paper’s finding: a threshold tuned to feel snappy on “yes” is tightest exactly where the caller is working up to “no, actually…”.
The rule that falls out: set the floor from the turns you cannot afford to truncate — digits, addresses, spelling, disagreement — not from the average turn, then stop paying for it on every other turn by replacing the fixed timer rather than raising it.
Background noise, speakerphone and the agent interrupting itself
Cause 3 is environmental and documented upstream. LiveKit Agents issue #6030 (open, filed 9 June 2026) reports background noise and background conversations on SIP telephony taken as the user speaking. Issue #6956 (open, 23 August 2026) is sharper: on livekit-agents 1.6.10, an A/B/A test changing only the bundled Silero ONNX checkpoint produced false speech detection during agent playback, phantom transcripts such as “Thank you.”, turns marked interrupted and the agent stopping its own response — workaround, pin the previous checkpoint via onnx_file_path. Issue #7063 (open, 31 August 2026) covers a false interruption leaving a stale speaking timestamp for the next turn.
A phantom transcript such as “Thank you.” is a fingerprint: caller turns nobody spoke mean a VAD threshold, not a prompt. Silero defaults activation_threshold to 0.5, with a deactivation threshold of max(threshold − 0.15, 0.01); raising activation is the lever for a noisy line, at the cost of clipping soft speech. Check what your platform adds before blaming the caller’s kitchen: Vapi’s API reference gives a default backgroundSound of office
on phone calls and off
on web (docs.vapi.ai).
Accent makes cause 1 look like cause 3: a transcriber that punctuates late holds the turn open, which is what Vapi’s 1.5 s onNoPunctuationSeconds path exists for. For Australian callers, accent accuracy and word error rate is a prerequisite.
What to change first
Ordered by what the public demand evidence points at — the 145-vote HighLevel item and the control that resolved it are both about the first two — then by what each change costs you. This is not a frequency measurement; once you have split-turn counts from your own calls, reorder it by those.
- Raise the interruption word threshold before touching any timer. Pipecat:
MinWordsUserTurnStartStrategy(min_words=3). Vapi:stopSpeakingPlan.numWords, default 0. Retell:interruption_sensitivity, default 1. This is the free change — Pipecat notes the thresholdonly applies when the bot is actively speaking
, so it costs nothing in response latency. - Replace the fixed timer with one that varies per caller. LiveKit 1.8.1 ships a dynamic endpointing mode whose
min_delayis, in its own source,learned from the user’s pausing behavior so we don’t cut off a user who pauses mid-turn
— butmodedefaults to “fixed”, so you must ask for it. Pipecat’s equivalent is Smart Turn in place of the silence strategy; Deepgram Flux gives confidence-based end-of-turn ateot_threshold0.7. - Only then raise the silence floor, and raise the binding one. On LiveKit that means Silero’s
min_silence_duration, notmin_delay. - Fix the audio path last: activation threshold, checkpoint pinning, and whatever noise suppression the telephony leg offers.
One warning: LiveKit issue #4450, a request to ignore filler words during interruption detection, was closed as not planned on 11 August 2026 — the word-count threshold is the supported route. Do not design around a filter that is not coming.
When to tune this yourself, and when a fixed threshold cannot work
Do it yourself when one number can serve everyone on the line. Below roughly 200 calls a week there is no pause distribution worth measuring: tune by ear across twenty recorded calls, one threshold at a time, re-running the split-turn test.
One fixed threshold stops being tunable the moment a number serves more than one caller population. The PNAS spread of 462 ms between the fastest and slowest language is unremarkable speech, before any older caller or anyone reading off a document. No min_delay is both snappy for the first group and patient with the last, so the choice is per-route configuration — separate agents per language, campaign and intent — or a detector that decides per pause. Zian AI’s Customer Support Agent runs 24/7 across 30+ languages for that reason: the language mix, not the threshold, is what breaks a one-dial setup.
Frequently asked questions
Why does my AI voice agent interrupt callers mid-sentence?
Because a silence timer, not meaning, decides the turn is over. On LiveKit Agents 1.8.1 stock defaults that timer is 550 ms; on the Pipecat 1.10.0 silence-timer strategy it is 800 ms. Any pause longer than the threshold is read as a completed turn, so a caller reading a number aloud gets cut off.
What silence threshold stops elderly or second-language callers being cut off?
There is no single correct value, and the published research explains why. Stivers et al., Universals and cultural variation in turn-taking in conversation (PNAS, 2009), measured mean response offsets of +7 ms in Japanese and +469 ms in Danish across ten languages. Set the floor from the turns you cannot afford to truncate, then measure the result.
Will making the agent wait longer make the call feel slow?
Yes, and the cost is per turn rather than per call. Moving the floor from 550 ms to 1,200 ms on a call with seven caller turns adds 4.55 seconds of silence in total, spread as an extra two-thirds of a second after every answer, including one-word answers.
Why does the agent stop when the caller only says mm-hmm?
That is barge-in sensitivity, a separate subsystem from endpointing. Interruptions are enabled by default in Pipecat, and the documented remedy is a minimum word count before an interruption counts. Raising it costs no latency because the threshold applies only while the agent is speaking.
Can background noise or a speakerphone make the agent interrupt itself?
Yes. Voice activity detection can register room noise, or the audio the agent is playing, as caller speech. LiveKit Agents issue 6030, open since 9 June 2026, reports background conversations on SIP calls read as the user speaking, and issue 6956, open since 23 August 2026, documents phantom transcripts and agent self-interruption traced to a bundled model checkpoint.
Is semantic turn detection better than voice activity detection?
For deciding when a caller has finished, yes, because meaning separates a thinking pause from a finished sentence and silence cannot. Deepgram Flux triggers end of turn on a confidence threshold defaulting to 0.7, with a 5000 ms timeout as a backstop. Voice activity detection is still required underneath, to know when speech started.
Getting the turn-taking right on real campaigns
Turn detection is not a prompt problem, and a better voice will not fix it. It is a threshold problem with a measurable failure rate, published defaults and a trade-off curve you pick a point on deliberately. If you would rather have it tuned per language and per campaign than maintain it yourself, Zian AI is in partnership-application beta. Apply For Partnership.