Skip to content

Commit f1d8923

Browse files
fix(realtime): omit null audio formats in SIP call attach updates (#2454)
1 parent 86f5c71 commit f1d8923

2 files changed

Lines changed: 41 additions & 2 deletions

File tree

src/agents/realtime/openai_realtime.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,7 +1043,9 @@ def _get_session_config(
10431043
input_format_source = model_settings.get(
10441044
"input_audio_format", DEFAULT_MODEL_SETTINGS.get("input_audio_format")
10451045
)
1046-
audio_input_args["format"] = to_realtime_audio_format(input_format_source)
1046+
input_format = to_realtime_audio_format(input_format_source)
1047+
if input_format is not None:
1048+
audio_input_args["format"] = input_format
10471049

10481050
if "noise_reduction" in input_audio_config:
10491051
audio_input_args["noise_reduction"] = input_audio_config.get("noise_reduction")
@@ -1085,7 +1087,9 @@ def _get_session_config(
10851087
output_format_source = model_settings.get(
10861088
"output_audio_format", DEFAULT_MODEL_SETTINGS.get("output_audio_format")
10871089
)
1088-
audio_output_args["format"] = to_realtime_audio_format(output_format_source)
1090+
output_format = to_realtime_audio_format(output_format_source)
1091+
if output_format is not None:
1092+
audio_output_args["format"] = output_format
10891093

10901094
if "speed" in output_audio_config:
10911095
audio_output_args["speed"] = output_audio_config.get("speed")

tests/realtime/test_realtime_model_settings.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from openai.types.realtime.realtime_session_create_request import (
77
RealtimeSessionCreateRequest,
88
)
9+
from openai.types.realtime.session_update_event import SessionUpdateEvent
910

1011
from agents.handoffs import Handoff
1112
from agents.realtime.agent import RealtimeAgent
@@ -14,6 +15,7 @@
1415
from agents.realtime.model import RealtimeModelConfig
1516
from agents.realtime.openai_realtime import (
1617
OpenAIRealtimeSIPModel,
18+
OpenAIRealtimeWebSocketModel,
1719
_build_model_settings_from_agent,
1820
_collect_enabled_handoffs,
1921
)
@@ -129,3 +131,36 @@ def ping() -> str:
129131
tool_names.add(name)
130132
assert ping.name in tool_names
131133
assert f"transfer_to_{child_agent.name}" in tool_names
134+
135+
136+
def test_call_id_session_update_omits_null_audio_formats() -> None:
137+
model = OpenAIRealtimeWebSocketModel()
138+
model._call_id = "call_123"
139+
140+
session_config = model._get_session_config({})
141+
payload = SessionUpdateEvent(type="session.update", session=session_config).model_dump(
142+
exclude_unset=True
143+
)
144+
145+
audio = payload["session"]["audio"]
146+
assert "format" not in audio["input"]
147+
assert "format" not in audio["output"]
148+
149+
150+
def test_call_id_session_update_includes_explicit_audio_formats() -> None:
151+
model = OpenAIRealtimeWebSocketModel()
152+
model._call_id = "call_123"
153+
154+
session_config = model._get_session_config(
155+
{
156+
"input_audio_format": "g711_ulaw",
157+
"output_audio_format": "g711_ulaw",
158+
}
159+
)
160+
payload = SessionUpdateEvent(type="session.update", session=session_config).model_dump(
161+
exclude_unset=True
162+
)
163+
164+
audio = payload["session"]["audio"]
165+
assert audio["input"]["format"]["type"] == "audio/pcmu"
166+
assert audio["output"]["format"]["type"] == "audio/pcmu"

0 commit comments

Comments
 (0)