Skip to content

Commit dee94b3

Browse files
authored
Merge pull request #3795 from omChauhanDev/fix/realtime-cancel-not-active
fix(realtime): handle response_cancel_not_active as non-fatal
2 parents 17205c1 + ece4343 commit dee94b3

4 files changed

Lines changed: 18 additions & 8 deletions

File tree

changelog/3795.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Treated `response_cancel_not_active` as a non-fatal error in realtime services (`OpenAIRealtimeLLMService`, `GrokRealtimeLLMService`, `OpenAIRealtimeBetaLLMService`) to prevent WebSocket disconnection when cancelling an inactive response.

src/pipecat/services/grok/realtime/llm.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,8 +571,11 @@ async def _receive_task_handler(self):
571571
elif evt.type == "response.function_call_arguments.done":
572572
await self._handle_evt_function_call_arguments_done(evt)
573573
elif evt.type == "error":
574-
await self._handle_evt_error(evt)
575-
return
574+
if evt.error.code == "response_cancel_not_active":
575+
logger.debug(f"{self} {evt.error.message}")
576+
else:
577+
await self._handle_evt_error(evt)
578+
return
576579

577580
async def _handle_evt_conversation_created(self, evt):
578581
"""Handle conversation.created event - first event after connecting."""

src/pipecat/services/openai/realtime/llm.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -618,9 +618,12 @@ async def _receive_task_handler(self):
618618
await self._handle_evt_function_call_arguments_done(evt)
619619
elif evt.type == "error":
620620
if not await self._maybe_handle_evt_retrieve_conversation_item_error(evt):
621-
await self._handle_evt_error(evt)
622-
# errors are fatal, so exit the receive loop
623-
return
621+
if evt.error.code == "response_cancel_not_active":
622+
logger.debug(f"{self} {evt.error.message}")
623+
else:
624+
await self._handle_evt_error(evt)
625+
# errors are fatal, so exit the receive loop
626+
return
624627

625628
@traced_openai_realtime(operation="llm_setup")
626629
async def _handle_evt_session_created(self, evt):

src/pipecat/services/openai_realtime_beta/openai.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -544,9 +544,12 @@ async def _receive_task_handler(self):
544544
await self._handle_evt_audio_transcript_delta(evt)
545545
elif evt.type == "error":
546546
if not await self._maybe_handle_evt_retrieve_conversation_item_error(evt):
547-
await self._handle_evt_error(evt)
548-
# errors are fatal, so exit the receive loop
549-
return
547+
if evt.error.code == "response_cancel_not_active":
548+
logger.debug(f"{self} {evt.error.message}")
549+
else:
550+
await self._handle_evt_error(evt)
551+
# errors are fatal, so exit the receive loop
552+
return
550553

551554
@traced_openai_realtime(operation="llm_setup")
552555
async def _handle_evt_session_created(self, evt):

0 commit comments

Comments
 (0)