From 6701d88c4a043639068a5829a933f572d1316e97 Mon Sep 17 00:00:00 2001 From: Spectual Date: Mon, 6 Apr 2026 21:43:16 -0700 Subject: [PATCH 1/2] fix: handle None choices in ChatCompletion response (provider error payloads) When a provider (e.g. OpenRouter) returns an error payload, the ChatCompletion response object has choices=None. Previously this caused a silent no-op or a downstream TypeError. Now a ModelBehaviorError is raised before choices[0] is accessed, including the provider's error field in the message when present. --- src/agents/models/openai_chatcompletions.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/agents/models/openai_chatcompletions.py b/src/agents/models/openai_chatcompletions.py index 454bd7afda..6f81d39556 100644 --- a/src/agents/models/openai_chatcompletions.py +++ b/src/agents/models/openai_chatcompletions.py @@ -20,7 +20,7 @@ from .. import _debug from ..agent_output import AgentOutputSchemaBase -from ..exceptions import UserError +from ..exceptions import ModelBehaviorError, UserError from ..handoffs import Handoff from ..items import ModelResponse, TResponseInputItem, TResponseStreamEvent from ..logger import logger @@ -131,6 +131,16 @@ async def get_response( prompt=prompt, ) + if not response.choices: + provider_error = getattr(response, "error", None) + error_details = ( + f": {provider_error}" if provider_error is not None else "" + ) + raise ModelBehaviorError( + f"ChatCompletion response has no choices (possible provider error payload)" + f"{error_details}" + ) + message: ChatCompletionMessage | None = None first_choice: Choice | None = None if response.choices and len(response.choices) > 0: From cbc538adf3fdbfe9e12a6edc7347f1e2d70672d5 Mon Sep 17 00:00:00 2001 From: Spectual Date: Wed, 8 Apr 2026 15:59:24 -0700 Subject: [PATCH 2/2] style: apply ruff formatting to openai_chatcompletions.py --- src/agents/models/openai_chatcompletions.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/agents/models/openai_chatcompletions.py b/src/agents/models/openai_chatcompletions.py index 6f81d39556..6aae318674 100644 --- a/src/agents/models/openai_chatcompletions.py +++ b/src/agents/models/openai_chatcompletions.py @@ -133,9 +133,7 @@ async def get_response( if not response.choices: provider_error = getattr(response, "error", None) - error_details = ( - f": {provider_error}" if provider_error is not None else "" - ) + error_details = f": {provider_error}" if provider_error is not None else "" raise ModelBehaviorError( f"ChatCompletion response has no choices (possible provider error payload)" f"{error_details}"