|
1 | 1 | import enum
|
2 | 2 | import json
|
3 | 3 | import logging
|
4 |
| -from datetime import timedelta |
5 | 4 | from typing import Any, AsyncIterator, Optional, Union, cast
|
6 | 5 |
|
7 | 6 | from azure.durable_functions.models.RetryOptions import RetryOptions
|
|
28 | 27 | WebSearchTool,
|
29 | 28 | )
|
30 | 29 | from agents.items import TResponseStreamEvent
|
31 |
| -from openai import ( |
32 |
| - APIStatusError, |
33 |
| -) |
34 | 30 | from openai.types.responses.tool_param import Mcp
|
35 | 31 | from openai.types.responses.response_prompt_param import ResponsePromptParam
|
36 | 32 |
|
@@ -243,53 +239,17 @@ def make_tool(tool: ToolInput) -> Tool:
|
243 | 239 | for x in input.handoffs
|
244 | 240 | ]
|
245 | 241 |
|
246 |
| - try: |
247 |
| - return await model.get_response( |
248 |
| - system_instructions=input.system_instructions, |
249 |
| - input=input_input, |
250 |
| - model_settings=input.model_settings, |
251 |
| - tools=tools, |
252 |
| - output_schema=input.output_schema, |
253 |
| - handoffs=handoffs, |
254 |
| - tracing=ModelTracing(input.tracing), |
255 |
| - previous_response_id=input.previous_response_id, |
256 |
| - prompt=input.prompt, |
257 |
| - ) |
258 |
| - except APIStatusError as e: |
259 |
| - # Listen to server hints |
260 |
| - retry_after = None |
261 |
| - retry_after_ms_header = e.response.headers.get("retry-after-ms") |
262 |
| - if retry_after_ms_header is not None: |
263 |
| - retry_after = timedelta(milliseconds=float(retry_after_ms_header)) |
264 |
| - |
265 |
| - if retry_after is None: |
266 |
| - retry_after_header = e.response.headers.get("retry-after") |
267 |
| - if retry_after_header is not None: |
268 |
| - retry_after = timedelta(seconds=float(retry_after_header)) |
269 |
| - |
270 |
| - should_retry_header = e.response.headers.get("x-should-retry") |
271 |
| - if should_retry_header == "true": |
272 |
| - raise e |
273 |
| - if should_retry_header == "false": |
274 |
| - raise ApplicationError( |
275 |
| - "Non retryable OpenAI error", |
276 |
| - non_retryable=True, |
277 |
| - next_retry_delay=retry_after, |
278 |
| - ) from e |
279 |
| - |
280 |
| - # Specifically retryable status codes |
281 |
| - if e.response.status_code in [408, 409, 429, 500]: |
282 |
| - raise ApplicationError( |
283 |
| - "Retryable OpenAI status code", |
284 |
| - non_retryable=False, |
285 |
| - next_retry_delay=retry_after, |
286 |
| - ) from e |
287 |
| - |
288 |
| - raise ApplicationError( |
289 |
| - "Non retryable OpenAI status code", |
290 |
| - non_retryable=True, |
291 |
| - next_retry_delay=retry_after, |
292 |
| - ) from e |
| 242 | + return await model.get_response( |
| 243 | + system_instructions=input.system_instructions, |
| 244 | + input=input_input, |
| 245 | + model_settings=input.model_settings, |
| 246 | + tools=tools, |
| 247 | + output_schema=input.output_schema, |
| 248 | + handoffs=handoffs, |
| 249 | + tracing=ModelTracing(input.tracing), |
| 250 | + previous_response_id=input.previous_response_id, |
| 251 | + prompt=input.prompt, |
| 252 | + ) |
293 | 253 |
|
294 | 254 |
|
295 | 255 | class DurableActivityModel(Model):
|
|
0 commit comments