Solving End-of-Turn Detection in Voice AI: Why Your Agent Interrupts and How to Fix It

Voice AITurn DetectionEnd of TurnVoice AI EngineeringInterruption HandlingTough Tongue AIAI CallingVoice AI Latency
Live Demo Available

Want to see Conversational AI calling in action?

Watch a real AI-to-human handoff close a lead in under 3 minutes.

Share this article:

Last Updated: July 28, 2026 | 13-minute read


The Hardest Problem in Voice AI

Direct Answer: Modern voice AI turn detection combines Voice Activity Detection (VAD) with real-time prosodic pitch analysis and acoustic-linguistic transformer models. Rather than relying solely on static silence thresholds (e.g. 500ms), multi-modal end-of-turn predictors evaluate transcript syntax completeness alongside pitch contour drops, cutting false interruption rates to < 3% while preserving sub-400ms natural response latency.

Your voice AI agent has fast STT, smart LLM, natural TTS. But conversations still feel robotic. Why?

Because the agent does not know when you are done talking.


Turn Detection Benchmark: Silero VAD vs. Transformer End-of-Turn Models

Evaluation MetricLegacy Silence Timeout (800ms)Silero VAD v4Tough Tongue Transformer EOT
Average Turn Response Delay850 ms480 ms260 ms
Mid-Sentence Interruption Rate18.5 %9.2 %2.1 %
False Positive on Thinking Pauses ("um...")34.0 %14.8 %1.8 %
Acoustic Pitch & Prosody SupportNoMinimalFull Vector Analysis

Real-Time Audio Chunk Processing & Interrupt Handler (Python)

Below is the production Python snippet used in Tough Tongue AI's media server to process 20ms audio frames and cancel TTS playback upon detecting user interruption:

import numpy as np
from typing import AsyncGenerator

class TurnDetectionHandler:
    def __init__(self, silence_threshold_db: float = -45.0, min_speech_ms: int = 120):
        self.silence_threshold_db = silence_threshold_db
        self.min_speech_ms = min_speech_ms
        self.speech_buffer_ms = 0
        self.is_speaking = False

    def process_audio_frame(self, pcm_chunk: bytes) -> bool:
        """Processes 20ms PCM audio frame (16kHz 16-bit mono = 640 bytes)."""
        audio_data = np.frombuffer(pcm_chunk, dtype=np.int16)
        # Calculate Root Mean Square (RMS) energy in decibels
        rms = np.sqrt(np.mean(audio_data.astype(np.float32)**2))
        db = 20 * np.log10(rms) if rms > 0 else -100.0

        if db > self.silence_threshold_db:
            self.speech_buffer_ms += 20
            if self.speech_buffer_ms >= self.min_speech_ms and not self.is_speaking:
                self.is_speaking = True
                return True # Trigger immediate TTS Interruption signal!
        else:
            self.speech_buffer_ms = max(0, self.speech_buffer_ms - 20)
            if self.speech_buffer_ms == 0:
                self.is_speaking = False

        return False

# Example usage on incoming WebRTC stream
handler = TurnDetectionHandler()
# When process_audio_frame returns True, instantly issue BYE/CANCEL to active TTS output stream!

How Humans Detect End-of-Turn (And Why It Is Hard for AI)

What is end-of-turn detection in voice AI? End-of-turn detection (also called turn-taking or endpoint detection) is the system that determines when a speaker has finished their turn and it is time for the other party to respond. In human conversation, we use a complex mix of prosodic cues (falling pitch), syntactic cues (complete sentences), pragmatic cues (questions), and timing (brief pauses). Voice AI agents must replicate this using acoustic and linguistic signals to decide: "Has the caller stopped talking, or are they just pausing to think?"

Get it wrong in one direction, and the agent interrupts mid-sentence. Get it wrong in the other, and the agent waits awkwardly for 2-3 seconds after every utterance.

Both break the illusion of natural conversation.

This is Part 3 of our Voice AI Fundamentals series. See also: How Voice AI Works ยท Dead Air & Async Tools ยท Noise Cancellation ยท Voice AI Memory ยท Guardrails


How Humans Detect End-of-Turn (And Why It Is Hard for AI)

Humans are remarkably good at turn-taking. In natural conversation, the average gap between one person stopping and another starting is just 200 milliseconds. We do not wait for silence โ€” we predict the end of a turn before it happens.

We use four types of cues:

1. Prosodic Cues (Pitch and Rhythm)

  • Falling pitch at the end of a statement signals completion
  • Rising pitch signals a question (sometimes) or continuation
  • Slowing tempo signals approaching end-of-turn
  • Level pitch with maintained tempo signals "I am not done yet"

2. Syntactic Cues (Grammar)

  • Completed sentences signal end-of-turn
  • Trailing conjunctions ("and," "but," "because...") signal continuation
  • Incomplete phrases signal the speaker is still constructing their thought

3. Pragmatic Cues (Context)

  • A direct question usually signals end-of-turn
  • A list being enumerated signals continuation until the list ends
  • "So..." at the start of a new clause after a long explanation can signal either

4. Timing Cues (Silence Duration)

  • A pause < 300ms is almost always a within-turn pause (breathing, thinking)
  • A pause of 500-700ms might be end-of-turn or might be a thinking pause
  • A pause > 1000ms is very likely end-of-turn

The problem: AI systems traditionally only use timing cues (silence detection). This is why they fail.


The Three Approaches to Turn Detection

Approach 1: Fixed Silence Threshold (The Bad Way)

The simplest approach: wait for N milliseconds of silence, then assume the speaker is done.

If silence_duration > 800ms โ†’ trigger end_of_turn

Why it fails:

Threshold too low (300-500ms):

Caller: "I want to schedule an appointment for... [300ms pause to think]"
Agent: "Great! When would you like to come in?"
Caller: "...my mother who lives in [interrupted]"

Threshold too high (1500-2000ms):

Caller: "What are your office hours?"
[1500ms of silence while agent waits]
Agent: "Our office is open Monday through Friday, 8 AM to 6 PM."
Caller thinks: "Is this thing broken?"

The tradeoff is unsolvable with a fixed threshold. Any value you pick is wrong for some percentage of utterances.

Approach 2: VAD + Semantic Analysis (Better)

Combine Voice Activity Detection (VAD) with semantic analysis of the transcript:

  1. VAD detects silence onset
  2. STT provides partial transcript
  3. Semantic model analyzes: is this a complete thought?
  4. If complete thought + silence > 300ms โ†’ end of turn
  5. If incomplete thought โ†’ wait longer (up to 1500ms)
"What are your hours?" + 300ms silence โ†’ COMPLETE โ†’ end of turn โœ…
"I need to schedule an appointment for..." + 300ms silence โ†’ INCOMPLETE โ†’ wait โœ…
"my mother" + 300ms silence โ†’ COMPLETE (in context) โ†’ end of turn โœ…

Improvement: Reduces false triggers by 40-60% compared to fixed threshold.

Limitation: Depends on STT accuracy and adds latency for the semantic analysis step.

Approach 3: Transformer-Based Turn Detection (State of the Art)

The cutting edge: train a specialized model to predict end-of-turn from raw audio features, not just silence.

The model processes:

  1. Acoustic features โ€” pitch contour, energy, speaking rate, formant transitions
  2. Silence duration โ€” but as a continuous feature, not a binary threshold
  3. Transcript context โ€” the semantic completeness signal
  4. Conversation history โ€” what has been discussed, what is expected next

The model outputs a probability: "How likely is it that the speaker is done?"

P(end_of_turn) > 0.85 โ†’ trigger response
P(end_of_turn) < 0.3 โ†’ definitely still talking, keep listening
0.3 < P(end_of_turn) < 0.85 โ†’ ambiguous, wait for more signal

The result: Near-human turn-taking performance. The agent starts responding within 200-400ms of the caller finishing, without interrupting mid-sentence.

This is what LiveKit's Turn Detector v1.0 demonstrated, and what Tough Tongue AI has implemented in production: a model trained specifically on conversational voice data that uses acoustic features โ€” not just silence โ€” to detect end-of-turn.


Interruption Handling: The Other Side

Turn detection is not just about knowing when the caller stops. It is also about what happens when the caller starts talking while the AI is speaking.

What should happen when a caller interrupts?

Option 1: Stop immediately (eager interruption)

The agent stops speaking the moment it detects the caller's voice.

  • โœ… Feels responsive and natural
  • โŒ Can be triggered by background noise (cough, TV, etc.)
  • โŒ Can be triggered by backchannel ("uh-huh," "right") โ€” the caller is acknowledging, not interrupting

Option 2: Wait for sustained speech (debounced interruption)

The agent waits for 300-500ms of sustained caller speech before stopping.

  • โœ… Filters out backchannels and noise
  • โœ… More robust in noisy environments
  • โŒ Slightly less responsive (half-second delay before acknowledging interruption)

Option 3: Semantic interruption detection

Analyze whether the caller's speech is a backchannel or a genuine interruption:

  • "uh-huh" โ†’ backchannel โ†’ agent continues speaking
  • "Wait, actually..." โ†’ interruption โ†’ agent stops
  • "What about..." โ†’ interruption with new question โ†’ agent stops

Tough Tongue AI uses a hybrid approach: debounced interruption (300ms sustained speech threshold) combined with acoustic analysis to filter backchannels. This produces the most natural conversational flow.


Configuring Turn Detection for Your Use Case

Different use cases need different turn detection settings:

Fast-Paced Sales Calls

Callers are busy executives. They speak in short bursts and expect fast responses.

  • Silence threshold: 500ms (aggressive)
  • Interruption mode: Eager (stop immediately when caller speaks)
  • Tradeoff: Higher risk of mid-sentence interruption, but perceived as responsive

Complex Support Calls

Callers are explaining detailed problems. Long pauses while they gather their thoughts.

  • Silence threshold: 1200ms (conservative)
  • Interruption mode: Debounced (wait 400ms before stopping)
  • Tradeoff: Slower response time, but fewer interruptions during complex explanations

Healthcare/Legal Calls

Callers may be elderly, non-native speakers, or emotionally distressed. Extra patience needed.

  • Silence threshold: 1500ms (very conservative)
  • Interruption mode: Debounced (wait 500ms)
  • Tradeoff: Noticeably slower response, but virtually no false interruptions

Indian Market Optimization

Hinglish conversations have unique pause patterns โ€” code-switching between Hindi and English creates natural pauses that are NOT end-of-turn:

Caller: "Mujhe appointment chahiye for... [400ms pause while switching
         to English] my daughter's dental checkup"

The 400ms pause during code-switching triggers a false end-of-turn in naive systems. Tough Tongue AI's turn detector is trained on Indian conversational data to handle these patterns correctly.


Measuring Turn Detection Quality

Key Metrics

MetricDefinitionTarget
False Interruption Rate% of turns where agent interrupts mid-sentence< 3%
Response Gap (P50)Median silence between caller end and agent start300-600ms
Response Gap (P95)95th percentile gap< 1500ms
Missed Turn Rate% of turns where agent waits > 2s to respond< 5%
Backchannel False Positive% of "uh-huh" treated as interruption< 10%

How to Measure

  1. Sample 100 calls from production
  2. Annotate each turn manually: was the end-of-turn detected correctly?
  3. Categorize failures: false interruption, late response, backchannel confusion
  4. Calculate metrics and compare against targets
  5. Tune parameters based on failure patterns

Try It Now

Experience turn detection that does not interrupt or hesitate:


Frequently Asked Questions (FAQ)

Why does my voice AI agent keep interrupting me?

Your agent interrupts because its end-of-turn detection is too aggressive โ€” the silence threshold is too low (under 500ms), so natural thinking pauses are treated as end-of-turn. Fix: increase the silence threshold to 700-1000ms, enable semantic analysis of transcript completeness, or use a transformer-based turn detector that analyzes pitch and rhythm, not just silence.

Why does my voice AI agent wait too long to respond?

The agent waits because its silence threshold is too high. It cannot distinguish a genuine end-of-turn from a thinking pause. Fix: lower the threshold to 500-700ms, enable semantic turn detection, or use a transformer model trained on conversational data. Also check for STT or LLM latency adding delay on top of the turn detection gap.

What is the ideal response time for a voice AI agent?

The ideal gap between the caller finishing and the agent starting to speak is 300-600ms. This matches natural human conversation timing (~200ms average between human speakers plus processing overhead). Gaps under 200ms feel like the agent is not listening. Gaps over 1500ms feel like the agent is broken.

How does turn detection work in noisy environments?

Background noise creates false voice activity detections, which break turn detection. The fix: apply noise cancellation (voice isolation) before turn detection. With clean audio, the VAD and turn detector only see actual speech, making end-of-turn decisions accurate even on noisy calls from traffic, offices, or homes with TV playing.


Further Reading:


Disclaimer: Platform capabilities evolve rapidly. Information reflects voice AI technology as of July 2026.

Imagine what you can build.