@@ -57,16 +57,18 @@ def make_message(
5757
5858def test_extract_last_content_of_text_message () -> None :
5959 # Build a message containing two text segments.
60- content1 = ResponseOutputText (annotations = [], text = "Hello " , type = "output_text" )
61- content2 = ResponseOutputText (annotations = [], text = "world!" , type = "output_text" )
60+ content1 = ResponseOutputText (annotations = [], text = "Hello " , type = "output_text" , logprobs = [] )
61+ content2 = ResponseOutputText (annotations = [], text = "world!" , type = "output_text" , logprobs = [] )
6262 message = make_message ([content1 , content2 ])
6363 # Helpers should yield the last segment's text.
6464 assert ItemHelpers .extract_last_content (message ) == "world!"
6565
6666
6767def test_extract_last_content_of_refusal_message () -> None :
6868 # Build a message whose last content entry is a refusal.
69- content1 = ResponseOutputText (annotations = [], text = "Before refusal" , type = "output_text" )
69+ content1 = ResponseOutputText (
70+ annotations = [], text = "Before refusal" , type = "output_text" , logprobs = []
71+ )
7072 refusal = ResponseOutputRefusal (refusal = "I cannot do that" , type = "refusal" )
7173 message = make_message ([content1 , refusal ])
7274 # Helpers should extract the refusal string when last content is a refusal.
@@ -87,8 +89,8 @@ def test_extract_last_content_non_message_returns_empty() -> None:
8789
8890def test_extract_last_text_returns_text_only () -> None :
8991 # A message whose last segment is text yields the text.
90- first_text = ResponseOutputText (annotations = [], text = "part1" , type = "output_text" )
91- second_text = ResponseOutputText (annotations = [], text = "part2" , type = "output_text" )
92+ first_text = ResponseOutputText (annotations = [], text = "part1" , type = "output_text" , logprobs = [] )
93+ second_text = ResponseOutputText (annotations = [], text = "part2" , type = "output_text" , logprobs = [] )
9294 message = make_message ([first_text , second_text ])
9395 assert ItemHelpers .extract_last_text (message ) == "part2"
9496 # Whereas when last content is a refusal, extract_last_text returns None.
@@ -116,9 +118,9 @@ def test_input_to_new_input_list_deep_copies_lists() -> None:
116118def test_text_message_output_concatenates_text_segments () -> None :
117119 # Build a message with both text and refusal segments, only text segments are concatenated.
118120 pieces : list [ResponseOutputText | ResponseOutputRefusal ] = []
119- pieces .append (ResponseOutputText (annotations = [], text = "a" , type = "output_text" ))
121+ pieces .append (ResponseOutputText (annotations = [], text = "a" , type = "output_text" , logprobs = [] ))
120122 pieces .append (ResponseOutputRefusal (refusal = "denied" , type = "refusal" ))
121- pieces .append (ResponseOutputText (annotations = [], text = "b" , type = "output_text" ))
123+ pieces .append (ResponseOutputText (annotations = [], text = "b" , type = "output_text" , logprobs = [] ))
122124 message = make_message (pieces )
123125 # Wrap into MessageOutputItem to feed into text_message_output.
124126 item = MessageOutputItem (agent = Agent (name = "test" ), raw_item = message )
@@ -131,8 +133,12 @@ def test_text_message_outputs_across_list_of_runitems() -> None:
131133 that only MessageOutputItem instances contribute any text. The non-message
132134 (ReasoningItem) should be ignored by Helpers.text_message_outputs.
133135 """
134- message1 = make_message ([ResponseOutputText (annotations = [], text = "foo" , type = "output_text" )])
135- message2 = make_message ([ResponseOutputText (annotations = [], text = "bar" , type = "output_text" )])
136+ message1 = make_message (
137+ [ResponseOutputText (annotations = [], text = "foo" , type = "output_text" , logprobs = [])]
138+ )
139+ message2 = make_message (
140+ [ResponseOutputText (annotations = [], text = "bar" , type = "output_text" , logprobs = [])]
141+ )
136142 item1 : RunItem = MessageOutputItem (agent = Agent (name = "test" ), raw_item = message1 )
137143 item2 : RunItem = MessageOutputItem (agent = Agent (name = "test" ), raw_item = message2 )
138144 # Create a non-message run item of a different type, e.g., a reasoning trace.
@@ -171,7 +177,9 @@ def test_tool_call_output_item_constructs_function_call_output_dict():
171177
172178def test_to_input_items_for_message () -> None :
173179 """An output message should convert into an input dict matching the message's own structure."""
174- content = ResponseOutputText (annotations = [], text = "hello world" , type = "output_text" )
180+ content = ResponseOutputText (
181+ annotations = [], text = "hello world" , type = "output_text" , logprobs = []
182+ )
175183 message = ResponseOutputMessage (
176184 id = "m1" , content = [content ], role = "assistant" , status = "completed" , type = "message"
177185 )
@@ -184,6 +192,7 @@ def test_to_input_items_for_message() -> None:
184192 "content" : [
185193 {
186194 "annotations" : [],
195+ "logprobs" : [],
187196 "text" : "hello world" ,
188197 "type" : "output_text" ,
189198 }
@@ -305,6 +314,7 @@ def test_input_to_new_input_list_copies_the_ones_produced_by_pydantic() -> None:
305314 type = "output_text" ,
306315 text = "Hey, what's up?" ,
307316 annotations = [],
317+ logprobs = [],
308318 )
309319 ],
310320 role = "assistant" ,
0 commit comments