Published on

Voice AI Mastery Series - Part 1: Getting Interruption Management Right

Authors

Voice AI Mastery Series - Part 1: Getting Interruption Management Right

I'm a Software Engineer working on Voice AI & Agents at Numeo.ai. This is Part 1 of a 3-part series where I'll share what I've learned building voice AI systems that actually work in production.

After months of building voice AI agents at Numeo.ai, I've learned that the difference between a frustrating AI call and a smooth conversation often comes down to one thing: timing. When should your AI speak? When should it wait? Get this wrong, and users will hang up before they hear how smart your AI actually is.

Why Timing Matters More Than You Think

Picture this: you're talking to a voice AI, you pause to think for a second, and BAM – the AI jumps in with a response. You try to speak again, it keeps talking, and suddenly you're both talking over each other. Sound familiar? This is what happens when interruption management goes wrong.

I've seen this kill user adoption faster than any other technical issue. Users will forgive a slightly robotic voice, but they won't forgive an AI that constantly interrupts them or feels sluggish to respond.

The Technical Foundation

Before diving into the timing stuff, let's talk about Voice Activity Detection (VAD). We use Silero VAD in our LiveKit setup, and it's pretty solid. VAD tells you when someone is speaking versus when they're quiet, but that's just the beginning.

Here's what we configure:

  • Min Speech Duration: 100ms (how long someone needs to speak before we consider it real speech)
  • Min Silence Duration: 200-300ms (how long silence lasts before we think they're done)
  • Activation Threshold: 0.7 (confidence level to trigger speech detection)

These are important, but the real magic happens in turn detection.

The Two Critical Parameters

Turn detection is where your AI decides "okay, now it's my turn to speak." There are two parameters that will make or break your conversation flow:

Min Endpoint: How Patient Your AI Is

This is the minimum time your AI waits before thinking the user is done talking. Too short, and your AI interrupts natural pauses. Too long, and conversations feel painfully slow.

I've found these work well:

  • 800ms for most conversations (customer service, general chat)
  • 600ms for fast-paced stuff (logistics, quick info exchange)
  • 1000ms+ for complex topics (healthcare, where people need time to think)

Max Endpoint: Your Safety Net

This is the maximum time your AI will wait before it definitely starts talking, no matter what. This prevents your AI from waiting forever when someone trails off or gets distracted.

Here's the thing: when you hear both the human and AI talking at the same time, it's usually because the max endpoint timing is off.

The Geography Problem

This is where things get tricky. Network latency varies wildly depending on where your users are calling from, and your interruption settings need to account for this.

The math problem: If your min endpoint is 200ms, but your network latency is 300ms, your AI will never wait for the user to finish speaking. By the time the silence is detected and processed, the user has probably started talking again.

Real numbers I've seen:

  • East Coast to West Coast: 60-80ms
  • International calls: 150-300ms
  • Bad connections: 400ms+

What we're working on:

  1. Measuring round-trip time when calls connect to get baseline latency
  2. Adjusting parameters based on location - East Coast vs West Coast calls need different settings
  3. Using multiple SIP providers and routing based on call destination for better performance
  4. Building a tracing system with OpenTelemetry and SigNoz dashboards to monitor conversation quality metrics in real-time

Measuring What Matters

Our team lead Beka always tells us: "when you don't measure, you can't optimize." So we've built a monitoring system using OpenTelemetry and SigNoz to track conversation quality metrics in real-time.

Key metrics we track:

  • LLM TTFT (Time to First Token): How quickly our language model starts responding (we're seeing ~773ms)
  • TTS TTFB (Time to First Byte): How fast our text-to-speech generates audio (~369ms)
  • Network RTT: Round-trip time for different network paths (220-222ms range)
  • Conversation duration: Total length of each interaction

Having these dashboards has been game-changing. You can see immediately when parameters need adjustment for different regions or user types.

Tracing Dashboard example

Platform-Specific Stuff

LiveKit Setup

Here's what our LiveKit turn detection looks like:

turn_detection = EnglishModel(
    min_endpoint_silence=0.8,  # 800ms - works well for most cases
    max_endpoint_silence=2.0,  # 2000ms - prevents infinite waiting
    prediction_threshold=0.7,  # confidence threshold
)

SIP Provider Considerations

If you're working with RingCentral, Twilio, or similar:

  • SIP adds 50-100ms latency
  • WebRTC conversion adds more processing time
  • Plan for 100-200ms additional latency from media processing

Common Problems and Fixes

The "Chatty AI" Problem

Symptom: Your AI jumps in after every tiny pause Fix: Increase min_endpoint, maybe add some confidence-based logic

The "Sluggish AI" Problem

Symptom: Long awkward pauses that make conversations feel unnatural Fix: Reduce min_endpoint, but be careful not to go too low

The "Ping-Pong" Problem

Symptom: AI and human keep interrupting each other Fix: Focus on max_endpoint optimization - this is usually the culprit

What's Next

Getting interruption management right is foundational. Once you nail this, you can focus on making your AI sound more natural (Part 2) and actually have good conversations (Part 3).

In my experience, spending time on this upfront saves you from user complaints later. A well-timed AI with a mediocre voice beats a perfectly synthesized voice that interrupts constantly.

The key is testing with real users, not just your development team. We all get used to our AI's quirks, but first-time users will notice timing issues immediately.


Next up: Part 2 - Making Your AI Sound Actually Human (without spending a fortune on voice cloning)