v0.8.0
Highlights
- Spoken fallback for empty user turns with nothing to recover. When VAD detects speech but STT produces no transcript for the turn -- and the context holds no unanswered user message to re-run (the very first turn of a session is the primary case) -- the bot previously stayed completely silent while the working-sound cue looped forever, until the user gave up and the idle timeout ended the session. This hits real users: degraded audio that trips VAD but defeats STT (Bluetooth HFP codec + wind, noisy mics) is common on mobile. Now the bot audibly says it couldn't make out what the user said and asks them to repeat, within a few seconds of the turn ending. The resulting speech naturally stops the working sound and resets the idle timer.
- New
AgentConfig.empty_turn_fallback(defaultTrue). SetFalseto disable, or pass a string to override the injected instruction and control the tone of the "could you repeat that?" response. - Loop-guarded. The fallback never fires while a response is in flight, the existing empty-turn recovery (unanswered question re-run, from v0.6.0) keeps priority, and consecutive fallbacks are capped at 2 -- a noisy mic repeatedly tripping VAD gets at most two apologies, then silence until a turn with real content. A turn where STT returns only whitespace counts as empty.
- Cascade brains only. Realtime (speech-to-speech) services don't implement mid-session context message appends in Pipecat 1.4.0, so the fallback is automatically disabled for realtime brains (logged at build time).
Upgrading: no config changes required -- the fallback is on by default. Pass empty_turn_fallback=False to restore the previous behavior.
Install
pip install 'openlily @ git+https://github.com/getlark/openlily.git@v0.8.0#subdirectory=server'