Skip to content
This repository was archived by the owner on Jan 27, 2026. It is now read-only.

Commit 0f55827

Browse files
committed
Update to satellite.py
1 parent 13bb024 commit 0f55827

File tree

1 file changed

+40
-3
lines changed

1 file changed

+40
-3
lines changed

wyoming_satellite/satellite.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,10 @@ async def event_from_server(self, event: Event) -> None:
284284
# Wake word detection started
285285
await self.trigger_detect()
286286
elif Detection.is_type(event.type):
287-
# Wake word detected
288-
_LOGGER.debug("Wake word detected")
289-
await self.trigger_detection(Detection.from_event(event))
287+
if not self.is_streaming:
288+
_LOGGER.info("Conversation started by server")
289+
await self._handle_server_detection(Detection.from_event(event))
290+
return # This event is for client-side control only
290291
elif VoiceStarted.is_type(event.type):
291292
# STT start
292293
await self.trigger_stt_start()
@@ -1223,6 +1224,15 @@ def __init__(self, settings: SatelliteSettings) -> None:
12231224
self._wake_info_ready = asyncio.Event()
12241225

12251226
async def event_from_server(self, event: Event) -> None:
1227+
# ---- START MODIFICATION ----
1228+
# Handle fake Detection event from server to start a conversation
1229+
if Detection.is_type(event.type):
1230+
if not self.is_streaming:
1231+
_LOGGER.info("Conversation started by server")
1232+
await self._handle_server_detection(Detection.from_event(event))
1233+
return # This event is for client-side control only
1234+
# ---- END MODIFICATION ----
1235+
12261236
# Only check event types once
12271237
is_run_satellite = False
12281238
is_pause_satellite = False
@@ -1274,6 +1284,33 @@ async def event_from_server(self, event: Event) -> None:
12741284
timestamp=self._debug_recording_timestamp
12751285
)
12761286

1287+
# ---- START MODIFICATION ----
1288+
async def _handle_server_detection(self, detection: Detection) -> None:
1289+
"""Handle a fake detection event from the server to start streaming."""
1290+
if self.is_streaming or (self.server_id is None):
1291+
return
1292+
1293+
# Don't check refractory period for server commands.
1294+
1295+
if self.wake_audio_writer is not None:
1296+
self.wake_audio_writer.stop()
1297+
1298+
if self.stt_audio_writer is not None:
1299+
self.stt_audio_writer.start(timestamp=self._debug_recording_timestamp)
1300+
1301+
_LOGGER.debug(detection)
1302+
self.is_streaming = True
1303+
_LOGGER.info("Streaming audio")
1304+
1305+
# Don't set refractory period for server commands.
1306+
# Don't forward the detection event back to the server.
1307+
# No pipeline name matching needed, the server already knows.
1308+
await self._send_run_pipeline()
1309+
await self.forward_event(detection.event()) # forward to event service
1310+
await self.trigger_streaming_start()
1311+
1312+
# ---- END MODIFICATION ----
1313+
12771314
async def trigger_server_disonnected(self) -> None:
12781315
await super().trigger_server_disonnected()
12791316

0 commit comments

Comments
 (0)