|
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