Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/realtime/app/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ async def connect(self, websocket: WebSocket, session_id: str):
# runner = RealtimeRunner(agent, config=runner_config)
model_config: RealtimeModelConfig = {
"initial_model_settings": {
"model_name": "gpt-realtime-2",
"model_name": "gpt-realtime-2.1",
"turn_detection": {
"type": "server_vad",
"prefix_padding_ms": 300,
Expand Down
2 changes: 1 addition & 1 deletion examples/realtime/cli/demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ async def run(self) -> None:
model_config: RealtimeModelConfig = {
"playback_tracker": self.playback_tracker,
"initial_model_settings": {
"model_name": "gpt-realtime-2",
"model_name": "gpt-realtime-2.1",
"turn_detection": {
"type": "semantic_vad",
"interrupt_response": True,
Expand Down
2 changes: 1 addition & 1 deletion examples/realtime/twilio/twilio_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ async def start(self) -> None:
model_config={
"api_key": api_key,
"initial_model_settings": {
"model_name": "gpt-realtime-2",
"model_name": "gpt-realtime-2.1",
"input_audio_format": "g711_ulaw",
"output_audio_format": "g711_ulaw",
"turn_detection": {
Expand Down
2 changes: 1 addition & 1 deletion examples/realtime/twilio_sip/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ async def accept_call(call_id: str) -> None:
f"/realtime/calls/{call_id}/accept",
body={
"type": "realtime",
"model": "gpt-realtime-2",
"model": "gpt-realtime-2.1",
"instructions": instructions_payload,
},
cast_to=dict,
Expand Down
2 changes: 2 additions & 0 deletions src/agents/realtime/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
"gpt-realtime",
"gpt-realtime-1.5",
"gpt-realtime-2",
"gpt-realtime-2.1",
"gpt-realtime-2.1-mini",
"gpt-realtime-2025-08-28",
"gpt-4o-realtime-preview",
"gpt-4o-realtime-preview-2024-10-01",
Expand Down
2 changes: 1 addition & 1 deletion src/agents/realtime/openai_realtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@


_USER_AGENT = f"Agents/Python {__version__}"
DEFAULT_REALTIME_MODEL = "gpt-realtime-2"
DEFAULT_REALTIME_MODEL = "gpt-realtime-2.1"
Comment thread
seratch marked this conversation as resolved.

DEFAULT_MODEL_SETTINGS: RealtimeSessionModelSettings = {
"voice": "ash",
Expand Down
2 changes: 1 addition & 1 deletion tests/realtime/test_conversion_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def test_try_convert_raw_message_valid_session_update(self):
"type": "session.update",
"other_data": {
"session": {
"model": "gpt-realtime-2",
"model": "gpt-realtime-2.1",
"type": "realtime",
"modalities": ["text", "audio"],
"voice": "ash",
Expand Down
12 changes: 6 additions & 6 deletions tests/realtime/test_openai_realtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ def mock_create_task_func(coro):
assert model.model == "gpt-4o-realtime-preview"

@pytest.mark.asyncio
async def test_connect_defaults_to_gpt_realtime_2(self, model, mock_websocket):
"""Test that connect() uses gpt-realtime-2 when no model is provided."""
async def test_connect_defaults_to_gpt_realtime_2_1(self, model, mock_websocket):
"""Test that connect() uses gpt-realtime-2.1 when no model is provided."""
config = {
"api_key": "test-api-key-123",
"initial_model_settings": {},
Expand All @@ -140,8 +140,8 @@ def mock_create_task_func(coro):

mock_connect.assert_called_once()
call_args = mock_connect.call_args
assert call_args[0][0] == "wss://api.openai.com/v1/realtime?model=gpt-realtime-2"
assert model.model == "gpt-realtime-2"
assert call_args[0][0] == "wss://api.openai.com/v1/realtime?model=gpt-realtime-2.1"
assert model.model == "gpt-realtime-2.1"

assert model._websocket_task is not None

Expand Down Expand Up @@ -1672,7 +1672,7 @@ def test_session_config_accepts_nested_custom_voice_object(self, model):
def test_session_config_defaults_audio_formats_when_not_call(self, model):
settings: dict[str, Any] = {}
cfg = model._get_session_config(settings)
assert cfg.model == "gpt-realtime-2"
assert cfg.model == "gpt-realtime-2.1"
assert cfg.audio is not None
assert cfg.audio.input is not None
assert cfg.audio.input.format is not None
Expand All @@ -1689,7 +1689,7 @@ def test_session_config_includes_reasoning_capable_settings(self, model):
cfg = model._get_session_config(settings)
payload = cfg.model_dump(exclude_unset=True)

assert payload["model"] == "gpt-realtime-2"
assert payload["model"] == "gpt-realtime-2.1"
assert payload["parallel_tool_calls"] is False
assert payload["reasoning"] == {"effort": "low"}

Expand Down
6 changes: 3 additions & 3 deletions tests/realtime/test_realtime_model_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def helper() -> str:

monkeypatch.setattr(agent, "get_all_tools", AsyncMock(return_value=[helper]))
agent.handoffs = [RealtimeAgent(name="handoff-child")]
base_settings: RealtimeSessionModelSettings = {"model_name": "gpt-realtime-2"}
base_settings: RealtimeSessionModelSettings = {"model_name": "gpt-realtime-2.1"}
starting_settings: RealtimeSessionModelSettings = {"voice": "verse"}
run_config: RealtimeRunConfig = {"tracing_disabled": True}

Expand All @@ -85,9 +85,9 @@ def helper() -> str:
assert merged["tools"][0].name == helper.name
assert merged["handoffs"][0].agent_name == "handoff-child"
assert merged["voice"] == "verse"
assert merged["model_name"] == "gpt-realtime-2"
assert merged["model_name"] == "gpt-realtime-2.1"
assert merged["tracing"] is None
assert base_settings == {"model_name": "gpt-realtime-2"}
assert base_settings == {"model_name": "gpt-realtime-2.1"}


@pytest.mark.asyncio
Expand Down
6 changes: 3 additions & 3 deletions tests/realtime/test_session_payload_and_formats.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ class _DummyModel(pydantic.BaseModel):

def _session_with_output(fmt: Any | None) -> RealtimeSessionCreateRequest:
if fmt is None:
return RealtimeSessionCreateRequest(type="realtime", model="gpt-realtime-2")
return RealtimeSessionCreateRequest(type="realtime", model="gpt-realtime-2.1")
return RealtimeSessionCreateRequest(
type="realtime",
model="gpt-realtime-2",
model="gpt-realtime-2.1",
# Use dict for output to avoid importing non-exported symbols in tests
audio=RealtimeAudioConfig(output=cast(Any, {"format": fmt})),
)
Expand All @@ -49,7 +49,7 @@ def test_normalize_session_payload_variants() -> None:
assert Model._normalize_session_payload(transcription_mapping) is None

# Valid realtime mapping should be converted to model
realtime_mapping: Mapping[str, object] = {"type": "realtime", "model": "gpt-realtime-2"}
realtime_mapping: Mapping[str, object] = {"type": "realtime", "model": "gpt-realtime-2.1"}
as_model = Model._normalize_session_payload(realtime_mapping)
assert isinstance(as_model, RealtimeSessionCreateRequest)
assert as_model.type == "realtime"
Expand Down
8 changes: 4 additions & 4 deletions tests/realtime/test_tracing.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ async def async_websocket(*args, **kwargs):
"session": {
"id": "session_456",
"type": "realtime",
"model": "gpt-realtime-2",
"model": "gpt-realtime-2.1",
},
}

Expand Down Expand Up @@ -148,7 +148,7 @@ async def async_websocket(*args, **kwargs):
"session": {
"id": "session_456",
"type": "realtime",
"model": "gpt-realtime-2",
"model": "gpt-realtime-2.1",
},
}

Expand All @@ -174,7 +174,7 @@ async def test_tracing_config_none_skips_session_update(self, model, mock_websoc
session_created_event = {
"type": "session.created",
"event_id": "event_123",
"session": {"id": "session_456", "type": "realtime", "model": "gpt-realtime-2"},
"session": {"id": "session_456", "type": "realtime", "model": "gpt-realtime-2.1"},
}

with patch.object(model, "send_event") as mock_send_event:
Expand Down Expand Up @@ -216,7 +216,7 @@ async def async_websocket(*args, **kwargs):
"session": {
"id": "session_456",
"type": "realtime",
"model": "gpt-realtime-2",
"model": "gpt-realtime-2.1",
},
}

Expand Down