@@ -84,6 +84,41 @@ def test_prepare_input_filters_items_seen_by_server_and_tool_calls() -> None:
8484 assert tracker .remaining_initial_input is None
8585
8686
87+ def test_hydrate_from_state_does_not_track_string_initial_input_by_object_identity () -> None :
88+ tracker = OpenAIServerConversationTracker (
89+ conversation_id = "conv-init-string" , previous_response_id = None
90+ )
91+
92+ tracker .hydrate_from_state (
93+ original_input = "hello" ,
94+ generated_items = [],
95+ model_responses = [],
96+ )
97+
98+ assert tracker .sent_items == set ()
99+ assert tracker .sent_initial_input is True
100+ assert tracker .remaining_initial_input is None
101+ assert len (tracker .sent_item_fingerprints ) == 1
102+
103+
104+ def test_hydrate_from_state_does_not_track_list_initial_input_by_object_identity () -> None :
105+ tracker = OpenAIServerConversationTracker (
106+ conversation_id = "conv-init-list" , previous_response_id = None
107+ )
108+ original_input = [cast (TResponseInputItem , {"role" : "user" , "content" : "hello" })]
109+
110+ tracker .hydrate_from_state (
111+ original_input = original_input ,
112+ generated_items = [],
113+ model_responses = [],
114+ )
115+
116+ assert tracker .sent_items == set ()
117+ assert tracker .sent_initial_input is True
118+ assert tracker .remaining_initial_input is None
119+ assert len (tracker .sent_item_fingerprints ) == 1
120+
121+
87122def test_mark_input_as_sent_and_rewind_input_respects_remaining_initial_input () -> None :
88123 tracker = OpenAIServerConversationTracker (conversation_id = "conv2" , previous_response_id = None )
89124 pending_1 : TResponseInputItem = cast (TResponseInputItem , {"id" : "p-1" , "type" : "message" })
0 commit comments