@@ -140,6 +140,7 @@ def __init__(self) -> None:
140
140
self ._ongoing_response : bool = False
141
141
self ._tracing_config : RealtimeModelTracingConfig | Literal ["auto" ] | None = None
142
142
self ._playback_tracker : RealtimePlaybackTracker | None = None
143
+ self ._created_session : OpenAISessionObject | None = None
143
144
144
145
async def connect (self , options : RealtimeModelConfig ) -> None :
145
146
"""Establish a connection to the model and keep it alive."""
@@ -349,7 +350,14 @@ async def _send_interrupt(self, event: RealtimeModelSendInterrupt) -> None:
349
350
int (elapsed_ms ),
350
351
)
351
352
await self ._send_raw_message (converted )
352
- await self ._cancel_response ()
353
+
354
+ automatic_response_cancellation_enabled = (
355
+ self ._created_session
356
+ and self ._created_session .turn_detection
357
+ and self ._created_session .turn_detection .interrupt_response
358
+ )
359
+ if not automatic_response_cancellation_enabled :
360
+ await self ._cancel_response ()
353
361
354
362
self ._audio_state_tracker .on_interrupted ()
355
363
if self ._playback_tracker :
@@ -483,6 +491,9 @@ async def _handle_ws_event(self, event: dict[str, Any]):
483
491
await self ._emit_event (RealtimeModelTurnEndedEvent ())
484
492
elif parsed .type == "session.created" :
485
493
await self ._send_tracing_config (self ._tracing_config )
494
+ self ._update_created_session (parsed .session ) # type: ignore
495
+ elif parsed .type == "session.updated" :
496
+ self ._update_created_session (parsed .session ) # type: ignore
486
497
elif parsed .type == "error" :
487
498
await self ._emit_event (RealtimeModelErrorEvent (error = parsed .error ))
488
499
elif parsed .type == "conversation.item.deleted" :
@@ -532,6 +543,13 @@ async def _handle_ws_event(self, event: dict[str, Any]):
532
543
):
533
544
await self ._handle_output_item (parsed .item )
534
545
546
+ def _update_created_session (self , session : OpenAISessionObject ) -> None :
547
+ self ._created_session = session
548
+ if session .output_audio_format :
549
+ self ._audio_state_tracker .set_audio_format (session .output_audio_format )
550
+ if self ._playback_tracker :
551
+ self ._playback_tracker .set_audio_format (session .output_audio_format )
552
+
535
553
async def _update_session_config (self , model_settings : RealtimeSessionModelSettings ) -> None :
536
554
session_config = self ._get_session_config (model_settings )
537
555
await self ._send_raw_message (
0 commit comments