diff --git a/src/openai/types/beta/beta_response_steer_input.py b/src/openai/types/beta/beta_response_steer_input.py index aac528e60b..e86bf916bb 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.""" @@ -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]] diff --git a/src/openai/types/responses/response_steer_input.py b/src/openai/types/responses/response_steer_input.py index 78426ab22c..0cfa6027ef 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.""" @@ -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]] 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..adc491bb46 --- /dev/null +++ b/tests/test_response_steer_failed_event_types.py @@ -0,0 +1,42 @@ +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]: + 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()) + + assert isinstance(event.steer.input, list) + message = event.steer.input[0] + assert isinstance(message, ResponseSteerInputItemListMessage) + 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()) + + assert isinstance(event.steer.input, list) + message = event.steer.input[0] + assert isinstance(message, BetaResponseSteerInputItemListMessage) + assert message.role == "user" + assert message.type is None