ripe-jordan-93499
04/07/2026, 11:10 AMtall-airline-16756
04/07/2026, 11:10 AMtall-airline-16756
04/07/2026, 11:10 AMripe-jordan-93499
04/07/2026, 11:11 AMtall-airline-16756
04/07/2026, 11:11 AMenable_partials=True (or equivalent) so interim transcripts are emitted immediately.
• Use a low-latency model (e.g., deepgram/nova-3 or nova-2) and, if applicable, the LiveKit Deepgram inference integration via WebRTC for sub-250ms STT.
• Reduce audio frame/chunk size (use ~20ms frames like WebRTC). Larger chunks cause buffering and longer gaps between partials.
• Verify you’re not batching or buffering audio client-side or server-side before sending to Deepgram—push frames as soon as captured.
• Check network/transport: packetization, jitter, or a non-persistent connection can add ~100s ms. Use persistent streaming (WebSocket/WebRTC) rather than repeated HTTP requests.
• If you’re doing language detection or using a multi-model setup, try specifying the language explicitly (if known) to avoid extra processing delays.
• Profile where time is spent: measure time from capture → send → Deepgram partial received → display. That narrows whether delay is audio framing, network, Deepgram config, or post-processing.
If you’d like, tell me:
• Which Deepgram model and API (WebSocket, WebRTC, REST) you’re using,
• Your audio frame/chunk size and sample rate,
• Whether you’re using LiveKit’s Deepgram inference plugin or sending audio separately.
With that I can give targeted changes or small config snippets.
Sources: Sequential Pipeline Architecture for Voice Agents | LiveKit | Voice Agent Architecture: STT, LLM, and TTS Pipelines Explained | LiveKit | Build Your First AI Voice Agent in Python: Complete Tutorial | LiveKit | Build Your First AI Voice Agent in Python: Complete Tutorial | LiveKit | Deepgram STT | LiveKit Documentation, with interactive elementsripe-jordan-93499
04/07/2026, 11:25 AMtall-airline-16756
04/07/2026, 11:25 AMnova-2-general over WebSocket via LiveKit’s Deepgram plugin, 8 kHz mono, and endpointing settings you listed.
Targeted suggestions to reduce the ~1.5s interim gap:
• Use a higher sample rate if possible. 8 kHz is low and can increase processing latency and partial quality; 16 kHz or 48 kHz reduces model buffering and improves partial emission.
• Reduce audio frame/chunk size to ~20ms frames before sending into the stream. Ensure you’re not aggregating multiple frames into larger chunks on client or plugin.
• Confirm plugin is configured to stream audio continuously (no internal batching). Send frames immediately as captured.
• Set enable_partials=True in the plugin config (if not already).
• Lower endpointing delay thresholds:
◦ min_endpointing_delay at 0.5s may cause the system to wait — try reducing to 0.25s or 0.0s while keeping endpointing_ms small (25ms is fine).
◦ Keep max_endpointing_delay only as high as needed (3s is fine for end-of-speech, but it shouldn’t affect interim frequency).
• Verify the WebSocket is a persistent low-latency connection (no reconnects or buffering). Watch for jitter/packet loss in the network.
• Ensure you are not doing heavy post-processing before emitting partials to the UI (e.g., filtering or expensive transforms).
• If language is known, set it explicitly to avoid extra model overhead.
Quick diagnostic checks to pinpoint the bottleneck:
1. Measure time from audio capture → send → Deepgram partial received → UI display.
2. Temporarily switch to 16 kHz and small frames; see if interim gap drops toward 200–300ms.
3. Log whether partials arrive at Deepgram earlier but are delayed by the plugin or app.
If you want, I can suggest exact plugin config snippets or show how to measure timestamps for the capture→send→receive path — which would you prefer?
, with interactive elementsripe-jordan-93499
04/07/2026, 12:27 PMtall-airline-16756
04/07/2026, 12:28 PMripe-jordan-93499
04/07/2026, 12:32 PMtall-airline-16756
04/07/2026, 12:33 PM