| 
3 | 3 | from collections.abc import AsyncIterator  | 
4 | 4 | from typing import Any  | 
5 | 5 | 
 
  | 
6 |  | -from openai.types.responses import Response, ResponseCompletedEvent, ResponseUsage  | 
 | 6 | +from openai.types.responses import (  | 
 | 7 | +    Response,  | 
 | 8 | +    ResponseCompletedEvent,  | 
 | 9 | +    ResponseContentPartAddedEvent,  | 
 | 10 | +    ResponseContentPartDoneEvent,  | 
 | 11 | +    ResponseCreatedEvent,  | 
 | 12 | +    ResponseFunctionCallArgumentsDeltaEvent,  | 
 | 13 | +    ResponseFunctionCallArgumentsDoneEvent,  | 
 | 14 | +    ResponseFunctionToolCall,  | 
 | 15 | +    ResponseInProgressEvent,  | 
 | 16 | +    ResponseOutputItemAddedEvent,  | 
 | 17 | +    ResponseOutputItemDoneEvent,  | 
 | 18 | +    ResponseOutputMessage,  | 
 | 19 | +    ResponseOutputText,  | 
 | 20 | +    ResponseReasoningSummaryPartAddedEvent,  | 
 | 21 | +    ResponseReasoningSummaryPartDoneEvent,  | 
 | 22 | +    ResponseReasoningSummaryTextDeltaEvent,  | 
 | 23 | +    ResponseReasoningSummaryTextDoneEvent,  | 
 | 24 | +    ResponseTextDeltaEvent,  | 
 | 25 | +    ResponseTextDoneEvent,  | 
 | 26 | +    ResponseUsage,  | 
 | 27 | +)  | 
 | 28 | +from openai.types.responses.response_reasoning_item import ResponseReasoningItem  | 
 | 29 | +from openai.types.responses.response_reasoning_summary_part_added_event import (  | 
 | 30 | +    Part as AddedEventPart,  | 
 | 31 | +)  | 
 | 32 | +from openai.types.responses.response_reasoning_summary_part_done_event import Part as DoneEventPart  | 
7 | 33 | from openai.types.responses.response_usage import InputTokensDetails, OutputTokensDetails  | 
8 | 34 | 
 
  | 
9 | 35 | from agents.agent_output import AgentOutputSchemaBase  | 
@@ -143,10 +169,151 @@ async def stream_response(  | 
143 | 169 |                 )  | 
144 | 170 |                 raise output  | 
145 | 171 | 
 
  | 
 | 172 | +            response = get_response_obj(output, usage=self.hardcoded_usage)  | 
 | 173 | +            sequence_number = 0  | 
 | 174 | + | 
 | 175 | +            yield ResponseCreatedEvent(  | 
 | 176 | +                type="response.created",  | 
 | 177 | +                response=response,  | 
 | 178 | +                sequence_number=sequence_number,  | 
 | 179 | +            )  | 
 | 180 | +            sequence_number += 1  | 
 | 181 | + | 
 | 182 | +            yield ResponseInProgressEvent(  | 
 | 183 | +                type="response.in_progress",  | 
 | 184 | +                response=response,  | 
 | 185 | +                sequence_number=sequence_number,  | 
 | 186 | +            )  | 
 | 187 | +            sequence_number += 1  | 
 | 188 | + | 
 | 189 | +            for output_index, output_item in enumerate(output):  | 
 | 190 | +                yield ResponseOutputItemAddedEvent(  | 
 | 191 | +                    type="response.output_item.added",  | 
 | 192 | +                    item=output_item,  | 
 | 193 | +                    output_index=output_index,  | 
 | 194 | +                    sequence_number=sequence_number,  | 
 | 195 | +                )  | 
 | 196 | +                sequence_number += 1  | 
 | 197 | + | 
 | 198 | +                if isinstance(output_item, ResponseReasoningItem):  | 
 | 199 | +                    if output_item.summary:  | 
 | 200 | +                        for summary_index, summary in enumerate(output_item.summary):  | 
 | 201 | +                            yield ResponseReasoningSummaryPartAddedEvent(  | 
 | 202 | +                                type="response.reasoning_summary_part.added",  | 
 | 203 | +                                item_id=output_item.id,  | 
 | 204 | +                                output_index=output_index,  | 
 | 205 | +                                summary_index=summary_index,  | 
 | 206 | +                                part=AddedEventPart(text=summary.text, type=summary.type),  | 
 | 207 | +                                sequence_number=sequence_number,  | 
 | 208 | +                            )  | 
 | 209 | +                            sequence_number += 1  | 
 | 210 | + | 
 | 211 | +                            yield ResponseReasoningSummaryTextDeltaEvent(  | 
 | 212 | +                                type="response.reasoning_summary_text.delta",  | 
 | 213 | +                                item_id=output_item.id,  | 
 | 214 | +                                output_index=output_index,  | 
 | 215 | +                                summary_index=summary_index,  | 
 | 216 | +                                delta=summary.text,  | 
 | 217 | +                                sequence_number=sequence_number,  | 
 | 218 | +                            )  | 
 | 219 | +                            sequence_number += 1  | 
 | 220 | + | 
 | 221 | +                            yield ResponseReasoningSummaryTextDoneEvent(  | 
 | 222 | +                                type="response.reasoning_summary_text.done",  | 
 | 223 | +                                item_id=output_item.id,  | 
 | 224 | +                                output_index=output_index,  | 
 | 225 | +                                summary_index=summary_index,  | 
 | 226 | +                                text=summary.text,  | 
 | 227 | +                                sequence_number=sequence_number,  | 
 | 228 | +                            )  | 
 | 229 | +                            sequence_number += 1  | 
 | 230 | + | 
 | 231 | +                            yield ResponseReasoningSummaryPartDoneEvent(  | 
 | 232 | +                                type="response.reasoning_summary_part.done",  | 
 | 233 | +                                item_id=output_item.id,  | 
 | 234 | +                                output_index=output_index,  | 
 | 235 | +                                summary_index=summary_index,  | 
 | 236 | +                                part=DoneEventPart(text=summary.text, type=summary.type),  | 
 | 237 | +                                sequence_number=sequence_number,  | 
 | 238 | +                            )  | 
 | 239 | +                            sequence_number += 1  | 
 | 240 | + | 
 | 241 | +                elif isinstance(output_item, ResponseFunctionToolCall):  | 
 | 242 | +                    yield ResponseFunctionCallArgumentsDeltaEvent(  | 
 | 243 | +                        type="response.function_call_arguments.delta",  | 
 | 244 | +                        item_id=output_item.call_id,  | 
 | 245 | +                        output_index=output_index,  | 
 | 246 | +                        delta=output_item.arguments,  | 
 | 247 | +                        sequence_number=sequence_number,  | 
 | 248 | +                    )  | 
 | 249 | +                    sequence_number += 1  | 
 | 250 | + | 
 | 251 | +                    yield ResponseFunctionCallArgumentsDoneEvent(  | 
 | 252 | +                        type="response.function_call_arguments.done",  | 
 | 253 | +                        item_id=output_item.call_id,  | 
 | 254 | +                        output_index=output_index,  | 
 | 255 | +                        arguments=output_item.arguments,  | 
 | 256 | +                        sequence_number=sequence_number,  | 
 | 257 | +                    )  | 
 | 258 | +                    sequence_number += 1  | 
 | 259 | + | 
 | 260 | +                elif isinstance(output_item, ResponseOutputMessage):  | 
 | 261 | +                    for content_index, content_part in enumerate(output_item.content):  | 
 | 262 | +                        if isinstance(content_part, ResponseOutputText):  | 
 | 263 | +                            yield ResponseContentPartAddedEvent(  | 
 | 264 | +                                type="response.content_part.added",  | 
 | 265 | +                                item_id=output_item.id,  | 
 | 266 | +                                output_index=output_index,  | 
 | 267 | +                                content_index=content_index,  | 
 | 268 | +                                part=content_part,  | 
 | 269 | +                                sequence_number=sequence_number,  | 
 | 270 | +                            )  | 
 | 271 | +                            sequence_number += 1  | 
 | 272 | + | 
 | 273 | +                            yield ResponseTextDeltaEvent(  | 
 | 274 | +                                type="response.output_text.delta",  | 
 | 275 | +                                item_id=output_item.id,  | 
 | 276 | +                                output_index=output_index,  | 
 | 277 | +                                content_index=content_index,  | 
 | 278 | +                                delta=content_part.text,  | 
 | 279 | +                                logprobs=[],  | 
 | 280 | +                                sequence_number=sequence_number,  | 
 | 281 | +                            )  | 
 | 282 | +                            sequence_number += 1  | 
 | 283 | + | 
 | 284 | +                            yield ResponseTextDoneEvent(  | 
 | 285 | +                                type="response.output_text.done",  | 
 | 286 | +                                item_id=output_item.id,  | 
 | 287 | +                                output_index=output_index,  | 
 | 288 | +                                content_index=content_index,  | 
 | 289 | +                                text=content_part.text,  | 
 | 290 | +                                logprobs=[],  | 
 | 291 | +                                sequence_number=sequence_number,  | 
 | 292 | +                            )  | 
 | 293 | +                            sequence_number += 1  | 
 | 294 | + | 
 | 295 | +                            yield ResponseContentPartDoneEvent(  | 
 | 296 | +                                type="response.content_part.done",  | 
 | 297 | +                                item_id=output_item.id,  | 
 | 298 | +                                output_index=output_index,  | 
 | 299 | +                                content_index=content_index,  | 
 | 300 | +                                part=content_part,  | 
 | 301 | +                                sequence_number=sequence_number,  | 
 | 302 | +                            )  | 
 | 303 | +                            sequence_number += 1  | 
 | 304 | + | 
 | 305 | +                yield ResponseOutputItemDoneEvent(  | 
 | 306 | +                    type="response.output_item.done",  | 
 | 307 | +                    item=output_item,  | 
 | 308 | +                    output_index=output_index,  | 
 | 309 | +                    sequence_number=sequence_number,  | 
 | 310 | +                )  | 
 | 311 | +                sequence_number += 1  | 
 | 312 | + | 
146 | 313 |             yield ResponseCompletedEvent(  | 
147 | 314 |                 type="response.completed",  | 
148 |  | -                response=get_response_obj(output, usage=self.hardcoded_usage),  | 
149 |  | -                sequence_number=0,  | 
 | 315 | +                response=response,  | 
 | 316 | +                sequence_number=sequence_number,  | 
150 | 317 |             )  | 
151 | 318 | 
 
  | 
152 | 319 | 
 
  | 
 | 
0 commit comments