From ad91393087e597d2675a37645b790f2ab0b52d03 Mon Sep 17 00:00:00 2001 From: yen0304 Date: Fri, 5 Jun 2026 01:24:25 +0800 Subject: [PATCH] fix(realtime): add reconnection resilience to send_raw() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit send_raw() was missing the try/except that send() has — if the WebSocket disconnects mid-send, the data is silently lost instead of being enqueued for retry after reconnection. --- src/openai/resources/realtime/realtime.py | 14 ++++++++++++-- src/openai/resources/responses/responses.py | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/openai/resources/realtime/realtime.py b/src/openai/resources/realtime/realtime.py index e4c5bd8163..bde3423e89 100644 --- a/src/openai/resources/realtime/realtime.py +++ b/src/openai/resources/realtime/realtime.py @@ -362,7 +362,12 @@ async def send_raw(self, data: bytes | str) -> None: raw = data if isinstance(data, str) else data.decode("utf-8") self._send_queue.enqueue(raw) return - await self._connection.send(data) + try: + await self._connection.send(data) + except Exception: + raw = data if isinstance(data, str) else data.decode("utf-8") + self._send_queue.enqueue(raw) + raise async def close(self, *, code: int = 1000, reason: str = "") -> None: self._intentionally_closed = True @@ -842,7 +847,12 @@ def send_raw(self, data: bytes | str) -> None: raw = data if isinstance(data, str) else data.decode("utf-8") self._send_queue.enqueue(raw) return - self._connection.send(data) + try: + self._connection.send(data) + except Exception: + raw = data if isinstance(data, str) else data.decode("utf-8") + self._send_queue.enqueue(raw) + raise def close(self, *, code: int = 1000, reason: str = "") -> None: self._intentionally_closed = True diff --git a/src/openai/resources/responses/responses.py b/src/openai/resources/responses/responses.py index 5019d7e831..bf1712cc10 100644 --- a/src/openai/resources/responses/responses.py +++ b/src/openai/resources/responses/responses.py @@ -3855,7 +3855,12 @@ async def send_raw(self, data: bytes | str) -> None: raw = data if isinstance(data, str) else data.decode("utf-8") self._send_queue.enqueue(raw) return - await self._connection.send(data) + try: + await self._connection.send(data) + except Exception: + raw = data if isinstance(data, str) else data.decode("utf-8") + self._send_queue.enqueue(raw) + raise async def close(self, *, code: int = 1000, reason: str = "") -> None: self._intentionally_closed = True @@ -4312,7 +4317,12 @@ def send_raw(self, data: bytes | str) -> None: raw = data if isinstance(data, str) else data.decode("utf-8") self._send_queue.enqueue(raw) return - self._connection.send(data) + try: + self._connection.send(data) + except Exception: + raw = data if isinstance(data, str) else data.decode("utf-8") + self._send_queue.enqueue(raw) + raise def close(self, *, code: int = 1000, reason: str = "") -> None: self._intentionally_closed = True