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:
2026-06-12 06:50:00 +00:00
parent 7294a81a9a
commit 8bb0ce51b1
5 changed files with 79 additions and 12 deletions
+5
View File
@@ -50,6 +50,11 @@ public static class RealtimeEvents
["threshold"] = 0.5,
["prefix_padding_ms"] = 300,
["silence_duration_ms"] = 500,
// GA requires both explicitly — without them the
// model never auto-generates a reply after VAD
// detects speech_stopped.
["create_response"] = true,
["interrupt_response"] = true,
},
},
["output"] = new JsonObject