few-zebra-58968
03/12/2026, 3:16 AMtall-airline-16756
03/12/2026, 3:16 AMtall-airline-16756
03/12/2026, 3:17 AMallow_interruptions=False.
• You cannot reliably change provider-side VAD mid-session. Provider VAD settings are set at session creation and are not dynamically reconfigurable during the same realtime session.
Practical solutions you can use
• Use a non-interruptible TTS or text-only intro, then switch to realtime:
a. Start the interaction with the agent playing a pre-recorded message or TTS output using session.say() (or a separate TTS flow).
b. Use allow_interruptions=False for that session.say() so that the intro is not cut off.
c. After the intro finishes, transition to the realtime model session that has provider VAD enabled for interactive conversation.
◦ Pros: Reliable non-interruptible intro.
◦ Cons: Requires orchestration to switch from TTS/text mode to realtime (may mean starting two logical sessions or disabling/enabling features outside the provider VAD).
• Disable provider turn detection up front and use LiveKit’s turn detection / STT pipeline:
◦ Start the session with provider turn detection/VAD disabled, and run your own VAD/turn detector (LiveKit plugins or your own STT+VAD). That gives you full control over when the model starts listening/responding.
◦ Pros: Full control over interruptions and timing.
◦ Cons: Requires running/maintaining your own STT/VAD (increases complexity and cost).
• Two-session approach:
◦ Session A: Play the non-interruptible intro (TTS or prerecorded).
◦ Session B: Start the realtime model session for user interaction afterward.
◦ Pros: Simple to reason about; reliable separation of intro vs interactive session.
◦ Cons: Extra session orchestration and switching logic.
• Prompt/instruction workarounds (limited reliability):
◦ Add instructions to the model like “Do not respond until the user says ‘Go ahead’” or “Wait 5 seconds after speaking before accepting input.” This relies on the model following the instruction and does not prevent provider VAD from cutting in, so it’s not dependable for strict non-interruptibility.
What LiveKit’s stance is
• LiveKit treats provider-side VAD/turn-detection as a provider-controlled capability. Provider VAD is used because it’s efficient and avoids running a parallel STT pipeline.
• For strict control (such as guaranteed non-interruptible intros), LiveKit supports disabling provider turn detection and using LiveKit’s own turn detection + STT/VAD plugins so you can manage interrupt behavior yourself.
• LiveKit does not support dynamically toggling provider VAD mid-session; to move between non-interruptible intro and interactive realtime you should plan for either a TTS-first flow or session/switch orchestration.
Questions to help me give a tailored recommendation
• Which provider are you using primarily (OpenAI GPT realtime or Gemini)?
• Do you already use LiveKit’s STT/VAD plugins, or are you relying solely on the provider for speech/turn detection?
• Is it acceptable for you to orchestrate separate steps/sessions (TTS intro → realtime) or do you need a single continuous session?
If you tell me your provider and current setup, I can give a concise, step‑by‑step approach (example code sketch) for either the TTS-first flow or the disable-provider-VAD + LiveKit VAD approach.
Sources: OpenAI Realtime API plugin guide | LiveKit Documentation | Gemini Live API plugin | LiveKit Documentation | Turns overview | LiveKit Documentation | Agent speech and audio | LiveKit Documentation | Uninterruptable Agent | LiveKit Documentation