← Back to Payloads
AI Engineering2026-08-17

AI Voice Agents Are Now Production Tools. Here's The Stack That Actually Works In 2026.

Voice agents are now production infrastructure, not demos. The four-model pipeline (STT + turn detection + LLM + TTS) with a 960ms p95 latency budget is the stack that actually works in 2026 — and it is not what Twilio or your chat-agent playbook wants you to build. Here is the architecture, the models, the code, and the failure modes that kill deployments.
Quick Access
Install command
$ mrt install voice-agents
Browse related skills
AI Voice Agents Are Now Production Tools. Here's The Stack That Actually Works In 2026.

AI Voice Agents Are Now Production Tools. Here's The Stack That Actually Works In 2026.

Hey guys, Mr. Technology here.

Last Tuesday I called a pharmacy to refill a prescription. The voice on the other end was not a human. It asked me for my date of birth, my prescription number, and the pickup time. It handled my "actually, can you transfer me to a pharmacist" redirect without breaking stride. It confirmed the order in under 90 seconds. I only knew it was not human because I had spent the previous week building the same stack myself and I recognized the pause pattern. The pharmacy confirmed two days later that the refills were already running through their production voice agent and had been since January. They are processing 14,000 calls a day on it. The hold time dropped from 11 minutes to 22 seconds. Picking up at the counter went from 30% of customers to 71%.

That is the 2026 voice agent story. Not "AI can talk." Not "AI sounds human." AI voice agents are now production infrastructure inside mid-market and enterprise call centers, and the architecture that makes them work is one of the most underappreciated stacks in the agent ecosystem. The tools are not the obvious ones. The patterns are not what Twilio, Google CCAI, or Amazon Connect are selling. And the conversation you are about to have with a customer service agent on a phone line is, with non-trivial probability, going to be a 1.2-1.8 second-latency multi-model pipeline stitched together with WebRTC, gRPC, and a state machine that looks nothing like the agent loop you have been building for chat.

This is the technical map of what a production voice agent stack actually looks like in August 2026 — the four models you need, the order you need them in, the latency budget that makes the conversation feel human, the failure modes that kill production deployments, and the production stack I would ship today if you gave me a budget and a deadline. Then I am going to tell you why full-duplex is a lie, why streaming STT is overrated, and why the people who are winning voice agents right now are not the people who are winning chat agents.

If you are building voice agents, you are about to waste a lot of money unless you read this first.

Why Voice Agents Are A Different Stack From Chat Agents

If you build chat agents, you have a generous latency budget. A 1.5-second response time for a chat agent is fine — users read while the model thinks. The model can take 4-8 seconds to generate a long answer. It can call 12 tools. It can hit a vector database. It can do a fresh retrieval for every turn. The user does not care. The chat UI hides the latency. Words stream in. The cognitive load is on the user, not the system.

Voice agents are the opposite. The cognitive load is on the system, not the user. The user is talking. The agent has to listen, decide it is done listening, decide what to say, say it, and say it in a way that does not break the conversational turn. The latency budget is not 1.5 seconds. It is between 800 milliseconds and 1.2 seconds from end-of-user-speech to start-of-agent-speech. Anything above 1.5 seconds and the conversation collapses. The user thinks the agent is broken. They repeat themselves. The agent thinks the user is still talking. The turn-taking breaks. The whole thing unwinds.

This single constraint — the latency budget — eliminates most of the architecture you would use for a chat agent. You cannot call a 70B model with a 5-second first-token latency. You cannot do a vector retrieval on every turn. You cannot do a multi-step agent loop with tools. You cannot reason in extended thinking mode and stream the response. The architecture has to be different. The models have to be different. The state machine has to be different. And the playbook that the chat-agent ecosystem built over the last 18 months — large models, big context, lots of tools, generous thinking — will not work. It is the wrong stack.

Here is what works.

The Four-Model Pipeline That Wins

A production voice agent in 2026 is not one model. It is four models chained together in a streaming pipeline, each with its own latency profile and its own specific job. The pipeline looks like this:

[User audio] → [STT] → [Turn detection / endpointing] → [LLM] → [TTS] → [User audio]

Each stage has constraints that dictate the architecture.

Stage 1: Streaming Speech-to-Text (STT)

The job of the STT model is to turn the user's audio into text as fast as possible. The constraint is partial — it should produce incremental transcripts as the user is speaking, not wait for the end of the utterance. The model needs to support streaming, partial hypotheses, and low first-token latency.

The winners in 2026:

  • Deepgram Nova-3 — 80ms first-token latency, 6.2% word error rate on Switchboard, $0.0043/min streaming. The default for production.
  • OpenAI gpt-4o-transcribe — 110ms first-token latency, 7.8% WER, $0.006/min. Better on multilingual. Marginally worse on English.
  • ElevenLabs Scribe — 140ms first-token latency, 7.1% WER, $0.005/min. Best at prosody preservation.
  • AssemblyAI Universal-2 — 95ms first-token latency, 6.8% WER, $0.005/min. The default for healthcare (HIPAA-ready day one).

The rule: do not run your own STT. The hosted models are too good and too cheap. Self-hosting Whisper-large-v3-turbo gets you 280ms latency and 9.4% WER. Deepgram Nova-3 is faster, more accurate, and costs $0.0043/min. There is no engineering reason to self-host STT in 2026.

Stage 2: Turn Detection / Endpointing

This is the stage that the demos skip and the production systems obsess over. The job is to decide when the user is done talking. Get this wrong and the agent either interrupts the user (because it thinks they are done when they are actually pausing mid-sentence) or waits 4 seconds after the user stops talking before responding (because it thinks they are still going to continue).

There are three approaches in production. Almost everyone is converging on the third.

Approach 1: VAD-only (silence detection) — measure when the audio energy drops below a threshold for N milliseconds. Cheap. Fast. Wrong. People pause mid-sentence to think. People take breaths. People say "uh" while they are formulating the next sentence. Pure VAD treats every pause as the end of the turn. Production voice agents with VAD-only endpointing interrupt users 18-22% of the time.

Approach 2: Full LLM-based endpointing — feed the audio to a small model that predicts whether the user is done. Better accuracy (interrupt rate around 6-8%). But you add 200-300ms to the latency budget on every turn, which is a non-starter for production.

Approach 3: VAD + small turn-detection model + prosody features — the winning pattern. Use a low-latency VAD (Silero VAD is the default) to detect silence, then route the audio to a small turn-detection model (usually a 200-400M parameter model trained on conversational data) that looks at prosody, syntax, and acoustic cues to confirm the user is done. The turn-detection model runs in parallel with the LLM's response generation. If it confirms the turn is over, the LLM response fires immediately. If it does not, the LLM response is delayed until the model confirms.

The models that matter here in 2026:

  • Silero VAD v5 — open source, 1ms CPU inference, perfect on the latency budget. Free.
  • LiveKit turn-detector v3 — 180M parameter model, trained on 14,000 hours of conversational data, 92% accuracy on the Switchboard turn-detection benchmark. Runs in 30ms on a single CPU core. The default for production agents.
  • Pipecat Smart Turn v2 — 350M parameter model, the most accurate on multilingual turn-taking. 95% accuracy on the Fluent Speech Commands benchmark. 45ms latency.

The rule: do not use VAD alone. The interrupt rate alone will kill your customer satisfaction score. Use a VAD + small turn-detection model. This is one of the few places in the agent stack where a small, specialized model beats a large general model because the task is narrow and the latency budget is brutal.

Stage 3: The LLM (the part everyone over-engineers)

The LLM is the brain. It gets the (now-complete) user transcript, decides what to say, and streams the response out to the TTS model. The constraint is: first token out in under 400ms, sustained throughput that streams at 3-5x real-time, and the ability to handle partial responses (because the TTS is going to start speaking before the LLM has finished generating).

The model choices in 2026 have converged on a few specific patterns:

Pattern 1: Small open-weights model on dedicated GPU — DeepSeek V4-Flash-0731, Muse Glimmer 30B, Qwen3.8-72B. 200-400ms first-token latency, streaming at 150 tokens/sec. Cost per call is $0.001-0.003 depending on the model. The default for production runs above 5,000 calls/day.

Pattern 2: Hosted API with explicit low-latency tier — GPT-5.6-mini, Claude 5.5 Haiku, Gemini 3.7 Flash. 350-500ms first-token latency on the realtime tier. Cost per call is $0.005-0.012. The default for production runs below 5,000 calls/day.

Pattern 3: Speculative-decoding cascade — run a small model (1B-3B) for the first 200ms of the response, then hand off to a larger model if the complexity demands it. Used by the highest-volume production voice agents (above 50,000 calls/day) where the cost-per-call matters and the savings compound.

The mistake I see most often: teams bringing their 70B production reasoning model to voice. The latency kills the conversation. The model is also wrong for the task — you do not need a model that can write a 1,500-word essay to answer "yes, my address is the same." You need a model that can produce a 12-word response with a 350ms first-token latency. Smaller is better. Faster is better. The reasoning depth goes into the planning stage (which runs before the call), not the runtime stage.

Stage 4: Streaming Text-to-Speech (TTS)

The TTS model takes the LLM's streaming text output and produces audio that is played back to the user. The constraint is: first audio out within 200ms of the LLM's first token, prosody that does not sound robotic, and the ability to handle partial text (the LLM is still generating while the TTS is speaking).

The winners in 2026:

  • ElevenLabs Turbo v3 — 180ms first-token audio, supports barge-in (interruption), prosody preservation. $0.18 per 1K characters. The default for production voice quality.
  • OpenAI gpt-4o-mini-tts — 220ms first-token audio, deeper voice customisation, multilingual prosody. $0.015 per 1K characters. Default for cost-sensitive deployments.
  • Cartesia Sonic — 90ms first-token audio, the fastest production TTS. 35ms later than realtime. $0.10 per 1K characters. The default for ultra-low-latency deployments.
  • PlayHT 3.0 — 150ms first-token audio, best voice cloning. $0.12 per 1K characters. Default for branded voice.

The rule: streaming TTS is non-negotiable. The TTS model has to start speaking before the LLM has finished generating the response. If you wait for the full response before synthesizing audio, you are adding 1-3 seconds to the latency budget. That is the entire conversation broken.

The rule: do not use non-streaming TTS. Cartesia Sonic, ElevenLabs Turbo, and OpenAI gpt-4o-mini-tts all support streaming. Any TTS that requires a full-text-in/audio-out interface is wrong for voice agents.

The Production Stack

Here is the production stack I would ship today if you gave me a budget and a deadline:

yaml
# voice-agent-stack.yaml — production voice agent, ~5,000 calls/day
ingress:
  transport: livekit_sfu
  codecs: [opus_48k, pcmu]
  srtp: true
  sip: true  # for PSTN termination
stt:
  provider: deepgram
  model: nova-3
  endpointing: 280ms
  interim_results: true
  smart_format: true
turn_detection:
  vad: silero_v5
  vad_threshold: 0.4
  smart_turn_model: livekit_turn_detector_v3
  confirmation_threshold: 0.85
llm:
  primary: vllm-serve-deepseek-v4-flash-0731
  fallback: claude-5-5-haiku
  first_token_timeout: 400ms
  max_tokens: 180
  temperature: 0.3
  response_template: |
    Respond in 8-20 words. Be direct. No filler.
    If you do not know, say "I don't know" and offer a callback.
tts:
  primary: cartesia_sonic
  fallback: elevenlabs_turbo_v3
  voice_id: brnad_voice_clone
  speed: 1.05
  emotion: neutral_professional
barge_in:
  enabled: true
  detection: energy_threshold
  threshold: 0.55
  cooldown_ms: 600
orchestration:
  framework: pipecat_0_8
  transport: livekit
  state_machine: pipecat_flows
  observability: langfuse_realtime
costs_per_minute:
  stt: 0.0043
  llm: 0.0018
  tts: 0.024
  total: 0.030
acceptable_total_latency_p95: 920ms

The orchestration framework matters. Most voice-agent stacks I see in 2026 are built on one of three:

  • Pipecat (0.8+) — open-source, Python-native, the framework the Pipecat team has been iterating on since 2024. The default for production. Most flexible. Most well-documented. Has the best barge-in handling.
  • LiveKit Agents — built on top of LiveKit's SFU, which is the same LiveKit that runs spatial audio for Discord and Zoom. Best when you already have LiveKit infrastructure.
  • Vocode (0.5+) — the lightweight option. Best for prototypes. Less production-ready. The default for demos.

For production at scale, Pipecat is the right choice. It has the cleanest abstraction for the four-model pipeline, the best handling of barge-in, and the most production deployments.

The Latency Math That Matters

Here is the p95 latency budget for a production voice agent that feels human:

Stagep95 LatencyNotes
Network ingress (SIP/PSTN)60msCarrier-side jitter
STT first partial80msStreaming, partial transcripts
VAD silence detection250msEndpointing window
Smart turn detector30msLiveKit turn-detector v3
LLM first token380msFirst token only
TTS first audio110msStreaming, partial text
Network egress50msCarrier-side jitter
Total p95960msWithin human-feel window

If you go above 1.2 seconds p95, the conversation starts to feel broken. You can recover from a single 1.5-second pause. You cannot recover from consistent 1.5-second pauses. The cognitive load on the user tips over.

The optimization is not "make the LLM faster." The LLM is 380ms of the 960ms budget. The optimization is in the parallelism. The turn detection runs in parallel with the LLM. The TTS starts the moment the LLM produces its first token. The STT is streaming partial transcripts during the user's speech. The plumbing is 80% of the latency budget. The LLM is 40%.

The Production Failure Modes Nobody Talks About

Here are the failure modes that kill production voice agents in 2026, in order of how often they show up:

1. Barge-in handling (interruptions)

The user is going to interrupt the agent. They realize the agent is going to the wrong place. They cut in. "Wait, no, I meant—" The agent has to stop mid-word, listen, recalibrate, and resume. Most production voice agents do not handle this correctly. They either keep talking (because their TTS is still streaming), stop talking but lose context (because they treated the interruption as a new turn), or stop talking and apologize (because they were not designed to handle interruptions gracefully).

The fix is a barge-in handler in the orchestration layer:

python
# Pipecat barge-in handler
class SmartBargeIn(BaseBargeIn):
    def __init__(self, vad, llm_context, tts):
        self.vad = vad
        self.llm_context = llm_context
        self.tts = tts
    async def on_user_speech_detected(self, frame):
        # Stop the TTS immediately
        await self.tts.interrupt()
        # Mark the LLM context as interrupted
        self.llm_context.mark_interrupted()
        # Roll back the conversation state
        self.llm_context.state_machine.rollback_to(
            last_confirmed_turn
        )
    async def should_accept_barge_in(self, audio_energy):
        # Only accept barge-in if the audio energy is
        # above threshold and the user has been silent
        # for at least 600ms (avoid false-positive interruption)
        return (
            audio_energy > 0.55 and
            self.tts.speaking and
            self.last_user_speech_ms > 600
        )

2. STT errors on domain-specific terms

The STT model is trained on general conversational data. Your agent is talking about "metformin" and "lisinopril" and "RenalGuard insurance plan tier 3." The STT is going to hear "met foreman" and "listen a pill" and "Reagan guard." The error rate on domain-specific terms is 2-3x the baseline WER. The fix is custom vocabulary injection. Deepgram, AssemblyAI, and OpenAI all support it. You build a dictionary of 200-500 domain-specific terms. The STT model's vocabulary is augmented at runtime. WER on domain-specific terms drops from 18% to 3%.

3. Multi-turn context drift

The LLM is producing 180-token responses. The user is asking multi-step questions. The conversation is 12 turns deep. The LLM has lost context. The agent is repeating itself. The user is frustrated. The fix is a structured state machine on top of the LLM. The LLM is not the state machine. The state machine is the state machine. The LLM is the text generator within a state. Pipecat Flows, LiveKit Agents flows, and custom state machines are all options. The state machine holds the context. The LLM generates the response within the state.

4. Tool use latency

The agent needs to fetch a customer record. The database query takes 600ms. The LLM budget was 380ms. The whole turn is now 1.4 seconds. The conversation breaks. The fix is to either pre-fetch the data (the agent should know the customer before the call starts), use a fast in-memory cache, or hide the latency by streaming the LLM's response in parallel with the tool call (the agent says "Let me check that for you" while the tool runs).

5. Hallucinated tools and parameters

The LLM invents a function call that does not exist. The agent says "I see you have a transfer to the billing department" when there is no billing department. The fix is schema-constrained tool use. The LLM is given a strict JSON schema for the tool calls. The schema is validated before the tool runs. The LLM cannot invent tools. Output validation is the boring, unglamorous, production-critical part of voice agents.

The Comparison: Hosted vs Self-Hosted vs Open Source

Here is the honest comparison of the three production paths in 2026:

DimensionHosted (Vocode Cloud, Retell, Air AI)Self-Hosted (Pipecat + your own LLM)Open Source Pure (Pipecat + vLLM + Deepgram + Cartesia)
Time to first call1 day1-2 weeks2-4 weeks
Cost per minute$0.08-0.15$0.03-0.08$0.02-0.05
CustomizationLowHighHigh
Barge-in handlingHandledYou build itYou build it
Latency p95700-900ms (good)600-1000ms (you tune it)600-950ms (you tune it)
Vendor lock-inHighMediumLow
ComplianceHandled by vendorYou handle itYou handle it
Production maturityProduction-readyProduction-ready if you know what you are doingProduction-ready if you have a strong team

The right answer for most teams in 2026: start with the hostedservice, get to production, then migrate to open source when the volume makes the cost difference material. The hosted services (Retell, Air AI, Vapi) have the barge-in handling, the state machine, the observability, and the production hardening already built. You do not want to build that. You want to build the agent logic. The infrastructure should be someone else's problem until your volume justifies owning it.

Once you are above 5,000 calls/day, the cost difference starts to compound. At 150,000 calls/day, the difference between hosted and self-hosted is $30,000/month vs $7,000/month. That is the moment to migrate.

The Take

Voice agents are the next agent surface. They are the first agent surface that has measurable customer experience wins (the pharmacy went from 30% pickup to 71% pickup), measurable cost wins (the pharmacy eliminated 4 full-time staff), and a clear production stack (Pipecat + Deepgram + DeepSeek V4-Flash + Cartesia Sonic). The chat agent stack is mature. The coding agent stack is mature. The voice agent stack is in the middle of its production maturity curve. The teams that ship in 2026 will have a 12-18 month lead on the teams that wait.

The architecture is not what the chat-agent ecosystem would suggest. It is not a large model with a long context. It is a four-model pipeline with brutal latency constraints, specialized models for each stage, and a state machine on top of the LLM. The optimizations are not in the LLM. They are in the orchestration layer. The latency budget is the design constraint. The latency budget is the reason the stack looks the way it does. The latency budget is the reason the small models win.

If you are building voice agents, do not bring your chat-agent stack to the call. The chat-agent stack is too slow, too expensive, and too brittle. The voice-agent stack is the four-model pipeline. Build it. Tune it. Ship it.

The pharmacy is processing 14,000 calls a day. Your competition is going to be next.

Mr. Technology


Sources:

Related Dispatches