dry-car-90162
02/23/2026, 5:06 AMtall-airline-16756
02/23/2026, 5:06 AMtall-airline-16756
02/23/2026, 5:07 AMresume_false_interruption=True, and (2) how to allow single‑word questions while ignoring single‑word backchannels.
Why you see a brief pause
• The agent uses false_interruption_timeout to wait and decide whether a short interruption is a false interruption (a backchannel) or the start of a user utterance. That waiting period (default 2s) is what causes the pause before the agent resumes speaking even when resume_false_interruption=True.
Why min_interruption_words=2 is problematic
• Raising min_interruption_words to 2 prevents single‑word disruptions (so backchannels are ignored), but it also blocks valid single‑word questions (“what?”, “how?”). So min_interruption_words alone can’t reliably distinguish backchannels from real short questions.
Recommended approach — combine settings + transcript-based filtering
• Keep interruption thresholds permissive so legitimate one‑word interruptions are allowed, and use the transcript content to tell backchannels apart from real questions.
Suggested configuration
1. Use:
◦ min_interruption_words=1 (allow single‑word interruptions)
◦ min_interruption_duration set low (e.g., 0.2–0.4s) so short intentional interruptions register
◦ Reduce false_interruption_timeout (e.g., 1.0s or lower) to shorten the resume pause
◦ resume_false_interruption=True
Example (pseudo) config:
session = AgentSession(
min_interruption_words=1,
min_interruption_duration=0.3,
false_interruption_timeout=1.0,
resume_false_interruption=True,
...
)
Add transcript-based backchannel filtering (recommended)
• Listen for finalized transcripts (user_input_transcribed with is_final=true).
• Maintain a small set of common backchannels (e.g., "okay", "yeah", "uh-huh", "right", "mm-hmm", "sure").
• If the final transcript exactly matches (or is a short match against) a backchannel, treat it as a false interruption: do not generate a reply or reset the agent flow.
• Otherwise, treat it as a real interruption and let the agent respond immediately.
Example handler (conceptual):
BACKCHANNELS = {"okay", "yeah", "yes", "uh-huh", "mm-hmm", "right", "sure"}
@session.on("user_input_transcribed")
async def on_transcript(transcript):
if not transcript.is_final:
return
text = transcript.transcript.strip().lower()
if text in BACKCHANNELS:
# ignore as backchannel
return
# treat as meaningful interruption (including single-word questions)
session.generate_reply(user_input=text)
Why this solves both problems
• The agent will resume quickly after brief false interruptions because false_interruption_timeout is shorter.
• Single-word meaningful questions are still accepted because min_interruption_words=1.
• Common backchannels are filtered by content instead of by word count, so they won’t trigger a full interruption/response.
Optional refinements
• Expand backchannel detection using simple heuristics: exact match, short length + common filler words, or a small ML classifier if you need higher accuracy.
• If some backchannels are being transcribed with punctuation (e.g., “okay.”) or variants (“ok”, “k”), normalize and include those variants.
• Tune false_interruption_timeout iteratively: shorter reduces pause but risks misclassifying two‑part utterances as false interruptions.
If you’d like, I can:
• Suggest a starter list of backchannel tokens to use for your language(s).
• Share a small heuristic to detect single-word questions vs filler (e.g., presence of question words like “what/how/why/where/when” or a rising intonation flag if your STT provides prosody).
• Help you pick exact values for min_interruption_duration and false_interruption_timeout based on how short the interruptions typically are in your use case.
Which of the follow-ups above would you like to try first — a starter backchannel list, a heuristic for single-word questions, or tuned numeric values for time/word thresholds?
Sources: Turns overview | LiveKit Documentation | Agent speech and audio | LiveKit Documentation | Agent session | LiveKit Documentation