three-tier VAD cascade + turn-end state machine Tier 1: energy gate cheap, fires on every noise if RMS > -40 dBFS → "speech" filters silence but NOT keyboard / cough / chair Tier 2: Silero VAD the 2020-2026 default 1M params · 1 ms / 30 ms chunk 87.7% TPR @ 5% FPR trained on 6000+ languages MIT · open · rejects transients Tier 3: semantic turn detector LiveKit turn-detector / custom VAD + recent-words classifier pauses mid-sentence vs done ("hmm, let me think..." stays) reduces false-interrupt by 5-10% turn-detection state machine state: "idle" ─ VAD fires > 250 ms of speech ─→ state: "speaking" (emit START) state: "speaking" ─ VAD silent for 500 ms ─→ state: "idle" (emit END) pre-roll buffer (300 ms): keep audio BEFORE VAD fires, else first word gets clipped min speech (250 ms): reject transients; silence hangover (500 ms): tune per use case the flush trick (Kyutai Unmute 2025) — sub-200 ms end-to-end 1. VAD fires end-of-speech at t=0 2. send buffered audio + flush signal to STT server 3. STT processes at 4× realtime → 500 ms look-ahead buffer → 125 ms wall time 4. transcript ready at t+125 ms — same latency as the VAD signal itself