From 6230b6297bfea10a25539bcb2f4ed7f219cb73c0 Mon Sep 17 00:00:00 2001 From: nightcityblade Date: Fri, 3 Jul 2026 11:26:42 +0800 Subject: [PATCH] fix: normalize realtime manager dict events --- src/openai/resources/realtime/realtime.py | 4 +-- tests/test_realtime_connection_manager.py | 34 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 tests/test_realtime_connection_manager.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_connection_manager.py b/tests/test_realtime_connection_manager.py new file mode 100644 index 0000000000..25b8d200d7 --- /dev/null +++ b/tests/test_realtime_connection_manager.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +import json +from unittest import mock + +from openai.resources.realtime.realtime import AsyncRealtimeConnectionManager, RealtimeConnectionManager +from openai._types import omit + + +def _manager_kwargs() -> dict[str, object]: + return { + "client": mock.Mock(), + "extra_query": {}, + "extra_headers": {}, + "websocket_connection_options": {}, + } + + +def test_sync_manager_send_strips_omit_values() -> None: + manager = RealtimeConnectionManager(**_manager_kwargs()) + + manager.send({"type": "response.cancel", "event_id": omit}) + + payload = json.loads(manager._RealtimeConnectionManager__send_queue.drain()[0]) + assert payload == {"type": "response.cancel"} + + +def test_async_manager_send_strips_omit_values() -> None: + manager = AsyncRealtimeConnectionManager(**_manager_kwargs()) + + manager.send({"type": "response.cancel", "event_id": omit}) + + payload = json.loads(manager._AsyncRealtimeConnectionManager__send_queue.drain()[0]) + assert payload == {"type": "response.cancel"}