diff --git a/src/agents/realtime/openai_realtime.py b/src/agents/realtime/openai_realtime.py index 236162622..dedbb0195 100644 --- a/src/agents/realtime/openai_realtime.py +++ b/src/agents/realtime/openai_realtime.py @@ -571,7 +571,7 @@ async def _handle_ws_event(self, event: dict[str, Any]): "transcript": part.get("transcript"), } ) - elif part.get("type") == "text": + elif part.get("type") in ("text", "output_text"): converted_content.append({"type": "text", "text": part.get("text")}) status = item.get("status") if status not in ("in_progress", "completed", "incomplete"): diff --git a/tests/realtime/test_openai_realtime.py b/tests/realtime/test_openai_realtime.py index 5954bbc93..176c374a9 100644 --- a/tests/realtime/test_openai_realtime.py +++ b/tests/realtime/test_openai_realtime.py @@ -473,6 +473,39 @@ async def test_backward_compat_output_item_added_and_done(self, model): types = [c[0][0].type for c in listener.on_event.call_args_list] assert types.count("item_updated") >= 2 + @pytest.mark.asyncio + async def test_text_mode_output_item_content(self, model): + """output_text content is properly handled in message items.""" + listener = AsyncMock() + model.add_listener(listener) + + msg_added = { + "type": "response.output_item.added", + "item": { + "id": "text_item_1", + "type": "message", + "role": "assistant", + "content": [ + {"type": "output_text", "text": "test data"}, + ], + }, + } + await model._handle_ws_event(msg_added) + + # Verify the item was updated with content + assert listener.on_event.call_count >= 2 + item_updated_calls = [ + call for call in listener.on_event.call_args_list if call[0][0].type == "item_updated" + ] + assert len(item_updated_calls) >= 1 + + item = item_updated_calls[0][0][0].item + assert item.type == "message" + assert item.role == "assistant" + assert len(item.content) >= 1 + assert item.content[0].type == "text" + assert item.content[0].text == "test data" + # Note: response.created/done require full OpenAI response payload which is # out-of-scope for unit tests here; covered indirectly via other branches.