<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dravin AI · Blog · Voice agents</title><description>Every post on voice agents from the Dravin AI blog, newest first: long reads on building with current models and agents.</description><link>https://dravin.ai/blog/tags/voice-agents/</link><language>en-gb</language><image><url>https://dravin.ai/apple-touch-icon.png</url><title>Dravin AI · Blog · Voice agents</title><link>https://dravin.ai/blog/tags/voice-agents/</link></image><lastBuildDate>Mon, 05 Oct 2026 18:30:00 GMT</lastBuildDate><atom:link href="https://dravin.ai/blog/tags/voice-agents/rss.xml" rel="self" type="application/rss+xml"/><item><title>Why voice agents pause, and how to shorten the silence</title><link>https://dravin.ai/blog/why-voice-agents-pause/</link><guid isPermaLink="true">https://dravin.ai/blog/why-voice-agents-pause/</guid><description>Where a voice agent’s silence comes from, which work can start before the caller finishes, how to handle interruptions and how to measure each stage.</description><pubDate>Mon, 05 Oct 2026 18:30:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A turn waits on end-of-turn detection, the final transcript, the model’s first token, the first audio and the network.&lt;/li&gt;&lt;li&gt;Before the turn is confirmed, start only work you can discard: drafts, retrieval and read-only lookups.&lt;/li&gt;&lt;li&gt;Measure each stage per turn, with median and 95th percentile response time and how often the agent interrupts callers.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;When a caller stops talking, a voice agent’s reply waits on a chain of steps: the decision that the caller has finished, the final transcript, the model’s first token, the first audio and the trip back over the network. Below we take one turn apart, then cover which work can start before the caller finishes, what to do when they cut in, and how to measure each stage.&lt;/p&gt;
&lt;h2 id=&quot;where-a-turns-time-goes&quot;&gt;Where a turn’s time goes&lt;/h2&gt;
&lt;p&gt;People leave little silence between turns. A 2009 study of recorded informal conversation in 10 languages put the gap after yes-or-no questions at 208 ms on average (median 100 ms), with language averages from 7 ms in Japanese to 469 ms in Danish &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[1]&lt;/a&gt;. Producing even one new word takes around 600 ms or more in experiments, which implies that listeners predict where a turn will end and prepare their reply while the other person is still talking &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[2]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The traditional cascaded voice agent (separate speech recognition, language model and speech synthesis) waits for silence and only then runs each stage in order. In a 2025 study where 39 adults talked to a robot, a baseline built this way waited for the recogniser’s end-of-speech signal (about 1 s of silence, by the authors’ estimate), then spent about 0.5 s in a hosted language model and about 1 s in a streaming speech synthesis service. Its replies most often came 2.6 s after the person stopped (median 2.7 s) &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[3]&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;p&gt;One turn of a cascaded voice agent&lt;/p&gt;&lt;ol&gt;&lt;li&gt;End of turn: is the caller done?&lt;/li&gt;&lt;li&gt;Final transcript: partials settle&lt;/li&gt;&lt;li&gt;First token: prompt is read&lt;/li&gt;&lt;li&gt;First audio: voice starts&lt;/li&gt;&lt;li&gt;Network: back to the caller&lt;/li&gt;&lt;/ol&gt;&lt;figcaption&gt;The first two stages overlap; then each waits for the one before. In the 2025 robot study’s baseline, about 1 s of silence, 0.5 s of language model time and 1 s of synthesis sum to 2.5 s, near the most common reply, 2.6 s [3].&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Two releases in the past week address parts of this chain. On 1 October Microsoft released MAI-Transcribe-2-Streaming, which returns partial transcripts while people speak; Microsoft says that in most cases words appear “as early as 320 milliseconds after they’re spoken” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[4]&lt;/a&gt;. On 5 October Amazon made Nova 2.5 Sonic generally available, a speech-to-speech model that keeps controllable turn-taking and asynchronous tool calling; Amazon says its latency is lower but gives no figure &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[5]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Two of the three designs in OpenAI’s guide are one model that interprets audio, decides what to do and responds in speech, and a chained pipeline where you can inspect or transform the text between stages and replace each component &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[6]&lt;/a&gt;. A speech-to-speech turn still waits for the end of the turn, the first audio and the network. We build both kinds, and our &lt;a href=&quot;https://dravin.ai/services/#voice&quot;&gt;voice agents&lt;/a&gt; section lists what that work covers.&lt;/p&gt;
&lt;h2 id=&quot;deciding-the-caller-has-finished&quot;&gt;Deciding the caller has finished&lt;/h2&gt;
&lt;p&gt;The simplest end-of-turn detector waits for silence. OpenAI’s server VAD “chunks the audio based on periods of silence”, and a shorter silence setting ends turns sooner &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[7]&lt;/a&gt;. Silence is a weak signal because people pause mid-sentence. LiveKit’s example is a caller who says “I need to think about that for a moment” and goes quiet, and a detector that only hears silence interrupts them &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[8]&lt;/a&gt;. The robot study describes the trade-off: depending on the threshold, “either long response delays or frequent interruptions” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[3]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;AWS turns that trade-off into a setting. It documents three endpointing sensitivities for Nova 2 Sonic, which wait for a pause of 1.5 s, 1.75 s or about 2 s, and says the choice “affects both the latency of responses and the likelihood of interrupting users who are still speaking”; it suggests the slowest for “elderly or speech-impaired users” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[9]&lt;/a&gt;. The guide still names only Nova 2 Sonic, so confirm the values on 2.5.&lt;/p&gt;
&lt;p&gt;A model can judge whether the words and the voice sound finished. OpenAI’s semantic VAD scores how likely it is that the user is done and waits for a timeout only when that probability is low &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[7]&lt;/a&gt;. LiveKit’s turn detector listens to what is said and how it is said; with it, the framework waits 0.3 to 2.5 s after speech, against 0.5 to 3.0 s without it &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[8]&lt;/a&gt;. Deepgram’s Flux recogniser emits turn events with an end-of-turn confidence &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[10]&lt;/a&gt;. In the robot study, a system that used two turn-taking models, both to judge the end of the turn and to start drafting early, cut the median response time from 2.7 s to 1.5 s against the silence baseline, and the interruption rate from 16.6% to 6.9% &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[3]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We set the detector per audience and task: a caller reading out an account number needs more patience than one confirming a booking with a yes.&lt;/p&gt;

&lt;h2 id=&quot;from-final-transcript-to-first-audio&quot;&gt;From final transcript to first audio&lt;/h2&gt;
&lt;p&gt;A streaming recogniser sends partial transcripts while the caller talks and revises them as more audio arrives; Microsoft describes its new model committing “a stable transcript once the utterance ends” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[4]&lt;/a&gt;. In a 2019 Google design, a streaming first pass produced the live predictions and a second decoder finalised them at the end of the utterance, cutting word errors by 17 to 22% relative to the first pass alone on a voice search task, adding under 200 ms to finalisation &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[11]&lt;/a&gt;. Either way the final text arrives after the caller stops and can differ from the last partial. LiveKit reports that wait per turn as &lt;code&gt;transcription_delay&lt;/code&gt; &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[12]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The language model reads the whole prompt before its first token: instructions, tool definitions, the conversation so far and the new turn. &lt;a href=&quot;https://dravin.ai/services/#inference&quot;&gt;Prefix caching&lt;/a&gt; skips the part that matches an earlier request, and it “only reduces the time of processing the queries (the prefilling phase)” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[13]&lt;/a&gt;. Append each new turn and leave everything before it unchanged, as OpenAI also advises, so the cache keeps matching &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[14]&lt;/a&gt;. Our &lt;a href=&quot;https://dravin.ai/blog/raising-llm-serving-throughput/&quot;&gt;serving playbook&lt;/a&gt; covers time to first token on your own GPUs.&lt;/p&gt;
&lt;p&gt;If your speech synthesis accepts streamed text, start it on the reply’s first words: Deepgram’s docs tell developers not to hold text back for sentence boundaries, because “the server streams a turn’s audio as tokens arrive” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[15]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Every turn crosses the network twice: the caller’s last words travel to the agent and the reply travels back. ITU-T G.114 says that if one-way, mouth-to-ear delay stays below 150 ms, most applications “will experience essentially transparent interactivity” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[16]&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;starting-work-before-the-caller-finishes&quot;&gt;Starting work before the caller finishes&lt;/h2&gt;
&lt;p&gt;The later stages can overlap the caller’s speech if the agent is willing to throw work away. Deepgram calls this eager end of turn: on a medium-confidence &lt;code&gt;EagerEndOfTurn&lt;/code&gt; event, send the transcript to the language model and start a reply; on &lt;code&gt;TurnResumed&lt;/code&gt;, cancel it; on &lt;code&gt;EndOfTurn&lt;/code&gt;, deliver it &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[17]&lt;/a&gt;. In Deepgram’s own example, an eager event fires on “Hi I need to cancel my subscription”, then the caller adds “please” and a &lt;code&gt;TurnResumed&lt;/code&gt; event follows &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[10]&lt;/a&gt;. Deepgram puts the saving at “hundreds of milliseconds” and, for complex, slow language model setups, at 100 to 200 ms for 50 to 70% more calls &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[17]&lt;/a&gt;. Deepgram still recommends starting with &lt;code&gt;EndOfTurn&lt;/code&gt; alone &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[17]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;LiveKit Agents does something similar by default. It starts generation as soon as a final transcript arrives, before the turn is confirmed, and holds speech synthesis back unless you opt in. It skips utterances longer than 10 s, which are more likely to change, and its docs warn that the feature “doesn’t always reduce latency” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[18]&lt;/a&gt;. The robot study’s system drafted tentative replies from the growing transcript, cancelling the previous draft each time, and sometimes had a reply ready at its 0.5 s minimum &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[3]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before the turn is confirmed, do only work you can discard: drafting a reply, retrieving documents, or a read-only lookup such as checking availability while the caller is still describing what they want &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[14]&lt;/a&gt;. Bookings, payments and messages wait. OpenAI’s guidance on transcript fragments warns that a fragment “may be incomplete, and later speech can change the request”, and says to discard outdated results, avoid duplicate actions and keep the usual permission and confirmation checks before consequential actions &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[14]&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;talking-while-tools-run&quot;&gt;Talking while tools run&lt;/h2&gt;
&lt;p&gt;A tool call puts silence back into the middle of a turn. Nova 2 Sonic handles part of this inside the model: its asynchronous tool calling keeps “accepting user input while tools are running” and answers new questions without waiting for pending results &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[19]&lt;/a&gt;. It does not cancel a pending call automatically when the caller changes their mind; every result reaches the model, which decides what to do with a stale one &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[19]&lt;/a&gt;. Since nothing is cancelled, a write started for an abandoned request would also complete, so any tool that writes should wait for explicit confirmation.&lt;/p&gt;
&lt;p&gt;In a cascaded agent you fill the gap yourself. LiveKit’s advice is to start speaking when a tool may take more than a second, with a short, pre-written filler line that is pre-rendered if it repeats. The same guide says to put a timeout on every call to an external system, because a backend that hangs blocks the session, and to block interruptions inside tools that write data, since a cut-in “can leave the operation half-done” &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[20]&lt;/a&gt;. OpenAI’s guide says to measure acknowledgements such as “I’m checking” separately from the answer the caller needs &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[6]&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;when-the-caller-cuts-in&quot;&gt;When the caller cuts in&lt;/h2&gt;
&lt;p&gt;Barge-in has two jobs: stop the audio at once, and make the model’s history match what the caller heard &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[21]&lt;/a&gt;. Audio is generated faster than it plays, so some is already queued on the client when the caller interrupts; AWS’s guide for Nova 2 Sonic tells the client to stop playback and clear that queue on the interruption signal &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[22]&lt;/a&gt;. Deepgram also says to stop playback locally without waiting for the server and to drop audio frames still arriving &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[21]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If the history keeps the whole reply, the model assumes the caller heard sentences that were never played, and a follow-up such as “what was that last thing?” goes wrong &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[23]&lt;/a&gt;. OpenAI’s Realtime API removes the unplayed part itself on WebRTC and SIP connections, where the server tracks playback; over a WebSocket the client sends &lt;code&gt;conversation.item.truncate&lt;/code&gt; with how much was played &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[23]&lt;/a&gt;. LiveKit Agents truncates its history to the part the user heard &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[24]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Not every sound is an interruption. Callers say “uh-huh” or “okay” as acknowledgements &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[18]&lt;/a&gt;, and echo or background noise can open a false turn &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[17]&lt;/a&gt;. LiveKit’s adaptive mode uses an audio model to tell real interruptions from acknowledgements &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[18]&lt;/a&gt;, and by default the agent resumes where it stopped when an interruption produces no words &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[24]&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;measuring-each-stage&quot;&gt;Measuring each stage&lt;/h2&gt;
&lt;p&gt;Measure each turn from the end of the caller’s speech to the first audio they hear, and keep each stage’s share. LiveKit Agents records, per turn, the time from end of speech to the end-of-turn decision, the transcription delay, the language model’s first token, the synthesiser’s first audio after its first text and the end-to-end latency &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[12]&lt;/a&gt;. Its &lt;code&gt;e2e_latency&lt;/code&gt; stops when the agent begins responding &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[12]&lt;/a&gt;. With a realtime speech-to-speech model the language model and synthesis fields stay empty &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[12]&lt;/a&gt;, so there you compare configurations end to end.&lt;/p&gt;
&lt;p&gt;Report the median and the 95th percentile across similar calls, as OpenAI’s voice agent guide recommends, and change one factor at a time on the same scenarios &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[6]&lt;/a&gt;. The guide says to measure how long callers wait for a useful spoken answer, so stop the clock at client playback &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[6]&lt;/a&gt;. Its test plan moves from synthetic speech to replayed human recordings, then to a simulated caller for multi-turn conversations &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[6]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Track how often the agent interrupts callers next to response time: with a silence threshold, shortening the wait tends to raise interruptions &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[3]&lt;/a&gt;. For eager or preemptive generation, log how often a draft is cancelled against how often it is used &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[17]&lt;/a&gt;. More broadly, OpenAI’s guide says to check whether faster responses change task success, tool correctness or interruptions &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/#sources&quot;&gt;[6]&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;checklist&quot;&gt;Checklist&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Write the target down: end of speech to first audio at the median and 95th percentile, plus a ceiling on how often the agent interrupts callers.&lt;/li&gt;
&lt;li&gt;Log each stage’s timing per turn, on replayed real calls.&lt;/li&gt;
&lt;li&gt;Tune end-of-turn detection per audience, and prefer a detector that hears words and intonation to a fixed silence timer.&lt;/li&gt;
&lt;li&gt;Before the turn is confirmed, start only work you can discard, and cancel it when the caller keeps talking.&lt;/li&gt;
&lt;li&gt;Keep the start of the prompt stable for prefix caching; if your speech synthesis accepts streamed text, send tokens as they arrive.&lt;/li&gt;
&lt;li&gt;For tools that may take over a second, play a short pre-rendered line; add timeouts; confirm before any write.&lt;/li&gt;
&lt;li&gt;On barge-in, stop playback locally, clear queued audio and truncate the history to what the caller heard.&lt;/li&gt;
&lt;li&gt;Filter acknowledgements and echo before treating a sound as an interruption.&lt;/li&gt;
&lt;li&gt;Change one setting at a time and rerun the same scenarios.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;sources&quot;&gt;Sources&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC2705608/&quot;&gt;PNAS, “Universals and cultural variation in turn-taking in conversation” (Jun 2009)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.frontiersin.org/journals/psychology/articles/10.3389/fpsyg.2015.00731/full&quot;&gt;Frontiers in Psychology, “Timing in turn-taking and its implications for processing models of language” (12 Jun 2015)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2501.08946&quot;&gt;KTH Royal Institute of Technology, “Applying General Turn-taking Models to Conversational Human-Robot Interaction” (arXiv, 15 Jan 2025; HRI 2025)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/build-expressive-voice-experiences-with-new-mai-models-in-microsoft-foundry/4524637&quot;&gt;Microsoft Foundry Blog, “Build expressive voice experiences with new MAI models in Microsoft Foundry” (1 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/about-aws/whats-new/2026/10/amazon-nova-2.5-Sonic/&quot;&gt;AWS What’s New, “Announcing Amazon Nova 2.5 Sonic with improved reasoning for voice agents” (5 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.openai.com/api/docs/guides/voice-agents&quot;&gt;OpenAI docs, “Voice agents” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.openai.com/api/docs/guides/realtime-vad&quot;&gt;OpenAI docs, “Voice activity detection (VAD)” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.livekit.io/agents/logic/turns/turn-detector/&quot;&gt;LiveKit docs, “LiveKit turn detector” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-turn-taking.html&quot;&gt;AWS docs, “Turn-taking controllability” (Amazon Nova 2 user guide, checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.deepgram.com/docs/flux/state&quot;&gt;Deepgram docs, “Understanding the Flux State Machine” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/1908.10992&quot;&gt;Google, “Two-Pass End-to-End Speech Recognition” (arXiv, 29 Aug 2019)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.livekit.io/testing/observability/data/&quot;&gt;LiveKit docs, “Data hooks” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.vllm.ai/en/latest/features/automatic_prefix_caching/&quot;&gt;vLLM docs, “Automatic Prefix Caching” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.openai.com/api/docs/guides/live-delegation&quot;&gt;OpenAI docs, “Delegation and tools in GPT-Live” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.deepgram.com/docs/flux-tts/voice-agent&quot;&gt;Deepgram docs, “Voice Agent Integration Patterns” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.itu.int/rec/T-REC-G.114-200305-I/en&quot;&gt;ITU-T, “G.114: One-way transmission time” (May 2003)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.deepgram.com/docs/flux/voice-agent-eager-eot&quot;&gt;Deepgram docs, “Optimize Voice Agent Latency with Eager End of Turn” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.livekit.io/agents/logic/turns/tuning/&quot;&gt;LiveKit docs, “Turn-taking tuning” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-async-tools.html&quot;&gt;AWS docs, “Asynchronous tool calling” (Amazon Nova 2 user guide, checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.livekit.io/agents/logic/tools/design/&quot;&gt;LiveKit docs, “Tool loop design” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.deepgram.com/docs/flux-tts/interrupt-handling&quot;&gt;Deepgram docs, “Interruption Handling” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-barge-in.html&quot;&gt;AWS docs, “Barge-in” (Amazon Nova 2 user guide, checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.openai.com/api/docs/guides/realtime-conversations&quot;&gt;OpenAI docs, “Realtime conversations” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.livekit.io/agents/logic/turns/&quot;&gt;LiveKit docs, “Turns overview” (checked 6 Oct 2026)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This post first appeared on &lt;a href=&quot;https://dravin.ai/blog/why-voice-agents-pause/&quot;&gt;Dravin AI&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>Voice agents</category><category>Inference optimisation</category><author>info@dravin.ai (Dravin AI)</author></item></channel></rss>