2121 ResponseFunctionWebSearch ,
2222)
2323from openai .types .responses .response_function_web_search_param import ResponseFunctionWebSearchParam
24+ from openai .types .responses .response_input_item_param import ResponseInputItemParam
2425from openai .types .responses .response_output_message import ResponseOutputMessage
2526from openai .types .responses .response_output_message_param import ResponseOutputMessageParam
2627from openai .types .responses .response_output_refusal import ResponseOutputRefusal
@@ -435,7 +436,7 @@ def test_to_input_items_for_reasoning() -> None:
435436
436437
437438def test_input_to_new_input_list_copies_the_ones_produced_by_pydantic () -> None :
438- # Given a list of message dictionaries, ensure the returned list is a deep copy.
439+ """Validated input items should be copied and made JSON dump compatible."""
439440 original = ResponseOutputMessageParam (
440441 id = "a75654dc-7492-4d1c-bce0-89e8312fbdd7" ,
441442 content = [
@@ -450,17 +451,21 @@ def test_input_to_new_input_list_copies_the_ones_produced_by_pydantic() -> None:
450451 status = "completed" ,
451452 type = "message" ,
452453 )
453- original_json = json . dumps ( original )
454- output_item = TypeAdapter ( ResponseOutputMessageParam ). validate_json ( original_json )
455- new_list = ItemHelpers .input_to_new_input_list ([ output_item ] )
454+ validated = TypeAdapter ( list [ ResponseInputItemParam ]). validate_python ([ original ] )
455+
456+ new_list = ItemHelpers .input_to_new_input_list (validated )
456457 assert len (new_list ) == 1
457458 assert new_list [0 ]["id" ] == original ["id" ] # type: ignore
458- size = 0
459- for i , item in enumerate (original ["content" ]):
460- size += 1 # pydantic_core._pydantic_core.ValidatorIterator does not support len()
461- assert item ["type" ] == original ["content" ][i ]["type" ] # type: ignore
462- assert item ["text" ] == original ["content" ][i ]["text" ] # type: ignore
463- assert size == 1
464459 assert new_list [0 ]["role" ] == original ["role" ] # type: ignore
465460 assert new_list [0 ]["status" ] == original ["status" ] # type: ignore
466461 assert new_list [0 ]["type" ] == original ["type" ]
462+ assert isinstance (new_list [0 ]["content" ], list )
463+
464+ first_content = cast (dict [str , object ], new_list [0 ]["content" ][0 ])
465+ assert first_content ["type" ] == "output_text"
466+ assert first_content ["text" ] == "Hey, what's up?"
467+ assert isinstance (first_content ["annotations" ], list )
468+ assert isinstance (first_content ["logprobs" ], list )
469+
470+ # This used to fail when validated payloads retained ValidatorIterator fields.
471+ json .dumps (new_list )
0 commit comments