From f310209b6260f717331831ff2a730f361e114f16 Mon Sep 17 00:00:00 2001 From: Bae Jin Seong Date: Wed, 27 May 2026 11:23:01 +0900 Subject: [PATCH] fix: tolerate null response output when parsing responses --- src/openai/lib/_parsing/_responses.py | 2 +- tests/lib/responses/test_responses.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/openai/lib/_parsing/_responses.py b/src/openai/lib/_parsing/_responses.py index 8853a0749f..36346177b8 100644 --- a/src/openai/lib/_parsing/_responses.py +++ b/src/openai/lib/_parsing/_responses.py @@ -58,7 +58,7 @@ def parse_response( ) -> ParsedResponse[TextFormatT]: output_list: List[ParsedResponseOutputItem[TextFormatT]] = [] - for output in response.output: + for output in response.output or []: if output.type == "message": content_list: List[ParsedContent[TextFormatT]] = [] for item in output.content: diff --git a/tests/lib/responses/test_responses.py b/tests/lib/responses/test_responses.py index 8e5f16df95..70aed9eb5b 100644 --- a/tests/lib/responses/test_responses.py +++ b/tests/lib/responses/test_responses.py @@ -7,7 +7,10 @@ from inline_snapshot import snapshot from openai import OpenAI, AsyncOpenAI +from openai._types import NOT_GIVEN from openai._utils import assert_signatures_in_sync +from openai.types.responses import Response +from openai.lib._parsing._responses import parse_response from ...conftest import base_url from ..snapshots import make_snapshot_request @@ -41,6 +44,23 @@ def test_output_text(client: OpenAI, respx_mock: MockRouter) -> None: ) +def test_parse_response_allows_null_output() -> None: + response = Response.construct( + id="resp_123", + object="response", + created_at=0, + model="gpt-4o-mini", + output=None, + parallel_tool_calls=True, + tool_choice="auto", + tools=[], + ) + + parsed = parse_response(text_format=NOT_GIVEN, input_tools=NOT_GIVEN, response=response) + + assert parsed.output == [] + + @pytest.mark.parametrize("sync", [True, False], ids=["sync", "async"]) def test_stream_method_definition_in_sync(sync: bool, client: OpenAI, async_client: AsyncOpenAI) -> None: checking_client: OpenAI | AsyncOpenAI = client if sync else async_client