Skip to content

v0.8.0

Choose a tag to compare

@vijit-lark vijit-lark released this 27 Jul 03:17

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 (default True). Set False to 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'