From a8aef1da014a83aa5e805663f1287c1553b7e359 Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:55:10 +0100 Subject: [PATCH 1/6] fix: allow omitted message type in steer responses --- src/openai/types/responses/response_steer_input.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openai/types/responses/response_steer_input.py b/src/openai/types/responses/response_steer_input.py index 78426ab22c..6bf87ed2c5 100644 --- a/src/openai/types/responses/response_steer_input.py +++ b/src/openai/types/responses/response_steer_input.py @@ -26,8 +26,8 @@ class ResponseSteerInputItemListMessage(BaseModel): role: Literal["user"] """The message role. Always `user`.""" - type: Literal["message"] - """The item type. Always `message`.""" + type: Optional[Literal["message"]] = None + """The optional item type. When provided, always `message`.""" id: Optional[str] = None """The unique ID of this message item.""" From bf74bd04ecfe06e472ea326f419ac0f0a2e931ce Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:55:26 +0100 Subject: [PATCH 2/6] fix: allow omitted beta message type in steer responses --- src/openai/types/beta/beta_response_steer_input.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openai/types/beta/beta_response_steer_input.py b/src/openai/types/beta/beta_response_steer_input.py index aac528e60b..2c1e323ede 100644 --- a/src/openai/types/beta/beta_response_steer_input.py +++ b/src/openai/types/beta/beta_response_steer_input.py @@ -35,8 +35,8 @@ class ResponseSteerInputItemListMessage(BaseModel): role: Literal["user"] """The message role. Always `user`.""" - type: Literal["message"] - """The item type. Always `message`.""" + type: Optional[Literal["message"]] = None + """The optional item type. When provided, always `message`.""" id: Optional[str] = None """The unique ID of this message item.""" From a214b41767ab0d352ad1e5d25918171cb85baf69 Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:55:54 +0100 Subject: [PATCH 3/6] fix: parse steer response messages without type discriminator --- src/openai/types/responses/response_steer_input.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/openai/types/responses/response_steer_input.py b/src/openai/types/responses/response_steer_input.py index 6bf87ed2c5..0cfa6027ef 100644 --- a/src/openai/types/responses/response_steer_input.py +++ b/src/openai/types/responses/response_steer_input.py @@ -94,9 +94,9 @@ class ResponseSteerInputItemListFunctionCallOutput(BaseModel): """ -ResponseSteerInputItemList: TypeAlias = Annotated[ - Union[ResponseSteerInputItemListMessage, ResponseSteerInputItemListFunctionCallOutput], - PropertyInfo(discriminator="type"), +ResponseSteerInputItemList: TypeAlias = Union[ + ResponseSteerInputItemListMessage, + ResponseSteerInputItemListFunctionCallOutput, ] ResponseSteerInput: TypeAlias = Union[str, List[ResponseSteerInputItemList]] From 10a1624c7489a6606036d9e475e86549c687d145 Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:56:17 +0100 Subject: [PATCH 4/6] fix: parse beta steer response messages without type discriminator --- src/openai/types/beta/beta_response_steer_input.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/openai/types/beta/beta_response_steer_input.py b/src/openai/types/beta/beta_response_steer_input.py index 2c1e323ede..e86bf916bb 100644 --- a/src/openai/types/beta/beta_response_steer_input.py +++ b/src/openai/types/beta/beta_response_steer_input.py @@ -116,9 +116,9 @@ class ResponseSteerInputItemListFunctionCallOutput(BaseModel): """ -ResponseSteerInputItemList: TypeAlias = Annotated[ - Union[ResponseSteerInputItemListMessage, ResponseSteerInputItemListFunctionCallOutput], - PropertyInfo(discriminator="type"), +ResponseSteerInputItemList: TypeAlias = Union[ + ResponseSteerInputItemListMessage, + ResponseSteerInputItemListFunctionCallOutput, ] BetaResponseSteerInput: TypeAlias = Union[str, List[ResponseSteerInputItemList]] From 39614ed153900236996ab1853680c08aa9625d7b Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:56:30 +0100 Subject: [PATCH 5/6] test: parse failed steer events without message type --- .../test_response_steer_failed_event_types.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/test_response_steer_failed_event_types.py diff --git a/tests/test_response_steer_failed_event_types.py b/tests/test_response_steer_failed_event_types.py new file mode 100644 index 0000000000..0389067de2 --- /dev/null +++ b/tests/test_response_steer_failed_event_types.py @@ -0,0 +1,34 @@ +from openai.types.beta.beta_response_steer_failed_event import BetaResponseSteerFailedEvent +from openai.types.responses.response_steer_failed_event import ResponseSteerFailedEvent + + +def _failed_event_payload() -> dict[str, object]: + return { + "error": { + "code": "invalid_input", + "message": "Invalid steering input", + "type": "invalid_request_error", + }, + "sequence_number": 1, + "steer": { + "input": [{"role": "user", "content": "continue"}], + "previous_response_id": "resp_test", + }, + "type": "response.steer.failed", + } + + +def test_failed_steer_event_parses_message_without_type() -> None: + event = ResponseSteerFailedEvent.model_validate(_failed_event_payload()) + + message = event.steer.input[0] + assert message.role == "user" + assert message.type is None + + +def test_beta_failed_steer_event_parses_message_without_type() -> None: + event = BetaResponseSteerFailedEvent.model_validate(_failed_event_payload()) + + message = event.steer.input[0] + assert message.role == "user" + assert message.type is None From a43566b69ad7836b20e4c6aad8e2db85355f156a Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:56:59 +0100 Subject: [PATCH 6/6] test: assert parsed steer message variants --- tests/test_response_steer_failed_event_types.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_response_steer_failed_event_types.py b/tests/test_response_steer_failed_event_types.py index 0389067de2..adc491bb46 100644 --- a/tests/test_response_steer_failed_event_types.py +++ b/tests/test_response_steer_failed_event_types.py @@ -1,5 +1,9 @@ from openai.types.beta.beta_response_steer_failed_event import BetaResponseSteerFailedEvent +from openai.types.beta.beta_response_steer_input import ( + ResponseSteerInputItemListMessage as BetaResponseSteerInputItemListMessage, +) from openai.types.responses.response_steer_failed_event import ResponseSteerFailedEvent +from openai.types.responses.response_steer_input import ResponseSteerInputItemListMessage def _failed_event_payload() -> dict[str, object]: @@ -21,7 +25,9 @@ def _failed_event_payload() -> dict[str, object]: def test_failed_steer_event_parses_message_without_type() -> None: event = ResponseSteerFailedEvent.model_validate(_failed_event_payload()) + assert isinstance(event.steer.input, list) message = event.steer.input[0] + assert isinstance(message, ResponseSteerInputItemListMessage) assert message.role == "user" assert message.type is None @@ -29,6 +35,8 @@ def test_failed_steer_event_parses_message_without_type() -> None: def test_beta_failed_steer_event_parses_message_without_type() -> None: event = BetaResponseSteerFailedEvent.model_validate(_failed_event_payload()) + assert isinstance(event.steer.input, list) message = event.steer.input[0] + assert isinstance(message, BetaResponseSteerInputItemListMessage) assert message.role == "user" assert message.type is None