From 94bd09d54ad1d2277d2a7efce50dabeb65824fb7 Mon Sep 17 00:00:00 2001 From: KirtiRamchandani Date: Sun, 14 Jun 2026 04:31:53 +0000 Subject: [PATCH] fix(realtime): transform pre-connect manager.send dict events Apply maybe_transform before json.dumps so Omit values are stripped, matching RealtimeConnection.send behavior. --- src/openai/resources/realtime/realtime.py | 4 ++-- tests/test_realtime_manager_send.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 tests/test_realtime_manager_send.py diff --git a/src/openai/resources/realtime/realtime.py b/src/openai/resources/realtime/realtime.py index e4c5bd8163..e700e15906 100644 --- a/src/openai/resources/realtime/realtime.py +++ b/src/openai/resources/realtime/realtime.py @@ -604,7 +604,7 @@ def send(self, event: RealtimeClientEvent | RealtimeClientEventParam) -> None: data = ( event.to_json(use_api_names=True, exclude_defaults=True, exclude_unset=True) if isinstance(event, BaseModel) - else json.dumps(event) + else json.dumps(maybe_transform(event, RealtimeClientEventParam)) ) self.__send_queue.enqueue(data) @@ -1072,7 +1072,7 @@ def send(self, event: RealtimeClientEvent | RealtimeClientEventParam) -> None: data = ( event.to_json(use_api_names=True, exclude_defaults=True, exclude_unset=True) if isinstance(event, BaseModel) - else json.dumps(event) + else json.dumps(maybe_transform(event, RealtimeClientEventParam)) ) self.__send_queue.enqueue(data) diff --git a/tests/test_realtime_manager_send.py b/tests/test_realtime_manager_send.py new file mode 100644 index 0000000000..63cbb12b8e --- /dev/null +++ b/tests/test_realtime_manager_send.py @@ -0,0 +1,15 @@ +import json + +from openai import OpenAI +from openai._types import omit + + +def test_preconnect_manager_send_strips_omit() -> None: + client = OpenAI(api_key="sk-test", base_url="http://127.0.0.1:4010") + manager = client.realtime.connect(model="gpt-4o-realtime-preview") + manager.send({"type": "response.cancel", "event_id": omit}) + queued = manager._RealtimeConnectionManager__send_queue.drain() # type: ignore[attr-defined] + assert len(queued) == 1 + payload = json.loads(queued[0]) + assert payload == {"type": "response.cancel"} + assert "event_id" not in payload