Plan 3 fix: GA turn_detection auto-create_response + reset state on WS reconnect
GA Realtime API requires create_response:true and interrupt_response:true inside turn_detection — without them the model never auto-generates a reply after VAD detects speech_stopped, so the relay idles out at 30s with no assistant audio. Add both. Client side: when the /device WS drops (Coolify rolling deploy, etc.), Session.run_forever reconnects but the StateMachine kept whatever state it was in — usually LISTENING, which permanently disables the wakeword. Add StateMachine.force_idle() and a Callbacks.on_disconnected() hook; main.py wires it to force the state back to IDLE on every disconnect. Also harden Session's fire-and-forget send_* helpers to swallow ConnectionClosed instead of bubbling up as unhandled task exceptions.
This commit is contained in:
@@ -107,6 +107,14 @@ def _make_callbacks(sm: StateMachine, playback: PlaybackWorker):
|
||||
playback.enqueue_wav(SLEEP_WAV, "sleep")
|
||||
else:
|
||||
playback.enqueue_done_marker("sleep")
|
||||
|
||||
def on_disconnected(self) -> None:
|
||||
# The conversation is gone with the WS — reset to IDLE so the
|
||||
# wakeword detector can re-arm. Any pending assistant audio left
|
||||
# in the playback queue still drains, but we drop a "sleep" done
|
||||
# marker only if we were mid-session.
|
||||
_log.info("on_disconnected: forcing state to IDLE")
|
||||
sm.force_idle()
|
||||
return _CB()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user