diff --git a/python/packages/hosting-responses/agent_framework_hosting_responses/_parsing.py b/python/packages/hosting-responses/agent_framework_hosting_responses/_parsing.py index 62e4bd2b095..313c699d47e 100644 --- a/python/packages/hosting-responses/agent_framework_hosting_responses/_parsing.py +++ b/python/packages/hosting-responses/agent_framework_hosting_responses/_parsing.py @@ -147,7 +147,9 @@ def flush() -> None: if not isinstance(item, Mapping): raise ValueError("each `input` item must be an object") item_map = cast("Mapping[str, Any]", item) - if item_map.get("type") == "message": + # `type` is optional on message items (EasyInputMessage), e.g. {"role": "user", "content": "hi"}. + item_type = item_map.get("type") + if item_type == "message" or (item_type is None and "role" in item_map): flush() role = item_map.get("role") if not isinstance(role, str) or role not in _RESPONSES_INPUT_MESSAGE_ROLES: diff --git a/python/packages/hosting-responses/tests/hosting_responses/test_parsing.py b/python/packages/hosting-responses/tests/hosting_responses/test_parsing.py index b98ccec596a..7d39fc104b3 100644 --- a/python/packages/hosting-responses/tests/hosting_responses/test_parsing.py +++ b/python/packages/hosting-responses/tests/hosting_responses/test_parsing.py @@ -82,6 +82,14 @@ def test_message_envelope_with_string_content(self) -> None: assert [m.role for m in msgs] == ["system", "user"] assert msgs[0].text == "be brief" + def test_message_envelope_without_type(self) -> None: + msgs = messages_from_responses_input([ + {"role": "developer", "content": "be brief"}, + {"role": "user", "content": [{"type": "input_text", "text": "hi"}]}, + ]) + assert [m.role for m in msgs] == ["developer", "user"] + assert [m.text for m in msgs] == ["be brief", "hi"] + def test_message_envelope_with_content_parts(self) -> None: msgs = messages_from_responses_input([ {