diff --git a/src/agents/realtime/openai_realtime.py b/src/agents/realtime/openai_realtime.py index 9bf7ea1308..34dcd2d012 100644 --- a/src/agents/realtime/openai_realtime.py +++ b/src/agents/realtime/openai_realtime.py @@ -1632,6 +1632,10 @@ def conversation_item_to_realtime_message_item( # For backward-compatibility of assistant message items c["type"] = "audio" content.append(c) + # Mirror the status the server reported for the item. Assistant messages are marked + # "completed" once the response is done, so falling back to a hardcoded "in_progress" + # would leave finished messages looking unfinished. Default to "in_progress" only when + # the server omits a status. return TypeAdapter(RealtimeMessageItem).validate_python( { "item_id": item.id or "", @@ -1639,7 +1643,7 @@ def conversation_item_to_realtime_message_item( "type": item.type, "role": item.role, "content": content, - "status": "in_progress", + "status": item.status or "in_progress", }, ) diff --git a/tests/realtime/test_item_parsing.py b/tests/realtime/test_item_parsing.py index e8484a58f6..506f3e8a94 100644 --- a/tests/realtime/test_item_parsing.py +++ b/tests/realtime/test_item_parsing.py @@ -65,6 +65,33 @@ def test_assistant_message_conversion() -> None: assert isinstance(converted, AssistantMessageItem) +def test_message_conversion_preserves_server_status() -> None: + item = RealtimeConversationItemAssistantMessage( + id="123", + type="message", + role="assistant", + content=[AssistantMessageContent(type="output_text", text="hi")], + status="completed", + ) + + converted = _ConversionHelper.conversation_item_to_realtime_message_item(item, None) + + assert converted.status == "completed" + + +def test_message_conversion_defaults_status_when_missing() -> None: + item = RealtimeConversationItemAssistantMessage( + id="123", + type="message", + role="assistant", + content=[AssistantMessageContent(type="output_text", text="hi")], + ) + + converted = _ConversionHelper.conversation_item_to_realtime_message_item(item, None) + + assert converted.status == "in_progress" + + def test_system_message_conversion() -> None: item = RealtimeConversationItemSystemMessage( id="123",