Skip to content

Commit bc71e8b

Browse files
authored
Realtime: fix interrupt logic (#1370)
I incorrectly created a playback tracker if none was specified. As a result, interruption logic failed bc there was no audio tracking.
1 parent 88b8199 commit bc71e8b

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

examples/realtime/app/server.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ async def websocket_endpoint(websocket: WebSocket, session_id: str):
138138

139139
if message["type"] == "audio":
140140
# Convert int16 array to bytes
141-
print("Received audio data")
142141
int16_data = message["data"]
143142
audio_bytes = struct.pack(f"{len(int16_data)}h", *int16_data)
144143
await manager.send_audio(session_id, audio_bytes)

src/agents/realtime/openai_realtime.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ async def connect(self, options: RealtimeModelConfig) -> None:
150150

151151
model_settings: RealtimeSessionModelSettings = options.get("initial_model_settings", {})
152152

153-
self._playback_tracker = options.get("playback_tracker", RealtimePlaybackTracker())
153+
self._playback_tracker = options.get("playback_tracker", None)
154154

155155
self.model = model_settings.get("model_name", self.model)
156156
api_key = await get_api_key(options.get("api_key"))
@@ -226,7 +226,7 @@ async def _listen_for_messages(self):
226226

227227
except websockets.exceptions.ConnectionClosedOK:
228228
# Normal connection closure - no exception event needed
229-
logger.info("WebSocket connection closed normally")
229+
logger.debug("WebSocket connection closed normally")
230230
except websockets.exceptions.ConnectionClosed as e:
231231
await self._emit_event(
232232
RealtimeModelExceptionEvent(
@@ -329,7 +329,7 @@ async def _send_interrupt(self, event: RealtimeModelSendInterrupt) -> None:
329329
current_item_content_index = playback_state.get("current_item_content_index")
330330
elapsed_ms = playback_state.get("elapsed_ms")
331331
if current_item_id is None or elapsed_ms is None:
332-
logger.info(
332+
logger.debug(
333333
"Skipping interrupt. "
334334
f"Item id: {current_item_id}, "
335335
f"elapsed ms: {elapsed_ms}, "
@@ -351,6 +351,13 @@ async def _send_interrupt(self, event: RealtimeModelSendInterrupt) -> None:
351351
int(elapsed_ms),
352352
)
353353
await self._send_raw_message(converted)
354+
else:
355+
logger.debug(
356+
"Didn't interrupt bc elapsed ms is < 0. "
357+
f"Item id: {current_item_id}, "
358+
f"elapsed ms: {elapsed_ms}, "
359+
f"content index: {current_item_content_index}"
360+
)
354361

355362
automatic_response_cancellation_enabled = (
356363
self._created_session

0 commit comments

Comments
 (0)