From 08844f0b1a818a4252dea4718a35dc8e10cf162c Mon Sep 17 00:00:00 2001 From: zkllll2002 Date: Mon, 14 Jul 2025 15:32:02 +0800 Subject: [PATCH 1/2] fix --- src/agents/extensions/models/litellm_model.py | 1 + src/agents/models/chatcmpl_converter.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/agents/extensions/models/litellm_model.py b/src/agents/extensions/models/litellm_model.py index a06c61dc3..901c325c3 100644 --- a/src/agents/extensions/models/litellm_model.py +++ b/src/agents/extensions/models/litellm_model.py @@ -371,6 +371,7 @@ def convert_message_to_openai( annotations=cls.convert_annotations_to_openai(message), audio=message.get("audio", None), # litellm deletes audio if not present tool_calls=tool_calls, + reasoning_content=message.reasoning_content, ) @classmethod diff --git a/src/agents/models/chatcmpl_converter.py b/src/agents/models/chatcmpl_converter.py index 9d0c6cf5e..827ba6c3f 100644 --- a/src/agents/models/chatcmpl_converter.py +++ b/src/agents/models/chatcmpl_converter.py @@ -36,6 +36,7 @@ ResponseOutputRefusal, ResponseOutputText, ResponseReasoningItem, + ResponseReasoningItemParam, ) from openai.types.responses.response_input_param import FunctionCallOutput, ItemReference, Message from openai.types.responses.response_reasoning_item import Summary @@ -206,6 +207,12 @@ def maybe_response_output_message(cls, item: Any) -> ResponseOutputMessageParam ): return cast(ResponseOutputMessageParam, item) return None + + @classmethod + def maybe_reasoning_message(cls, item: Any) -> ResponseReasoningItemParam | None: + if isinstance(item, dict) and item.get("type") == "reasoning": + return cast(ResponseReasoningItemParam, item) + return None @classmethod def extract_text_content( @@ -456,7 +463,11 @@ def ensure_assistant_message() -> ChatCompletionAssistantMessageParam: f"Encountered an item_reference, which is not supported: {item_ref}" ) - # 7) If we haven't recognized it => fail or ignore + # 7) reasoning message => not handled + elif cls.maybe_reasoning_message(item): + pass + + # 8) If we haven't recognized it => fail or ignore else: raise UserError(f"Unhandled item type or structure: {item}") From 3f688bb83d2e2de0793bb77373b59e5b7ce838d6 Mon Sep 17 00:00:00 2001 From: zkllll2002 Date: Mon, 14 Jul 2025 17:13:34 +0800 Subject: [PATCH 2/2] fix --- src/agents/extensions/models/litellm_model.py | 6 +++++- src/agents/models/chatcmpl_converter.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/agents/extensions/models/litellm_model.py b/src/agents/extensions/models/litellm_model.py index 901c325c3..263bae434 100644 --- a/src/agents/extensions/models/litellm_model.py +++ b/src/agents/extensions/models/litellm_model.py @@ -364,6 +364,10 @@ def convert_message_to_openai( provider_specific_fields.get("refusal", None) if provider_specific_fields else None ) + reasoning_content = "" + if hasattr(message, "reasoning_content") and message.reasoning_content: + reasoning_content = message.reasoning_content + return ChatCompletionMessage( content=message.content, refusal=refusal, @@ -371,7 +375,7 @@ def convert_message_to_openai( annotations=cls.convert_annotations_to_openai(message), audio=message.get("audio", None), # litellm deletes audio if not present tool_calls=tool_calls, - reasoning_content=message.reasoning_content, + reasoning_content=reasoning_content, ) @classmethod diff --git a/src/agents/models/chatcmpl_converter.py b/src/agents/models/chatcmpl_converter.py index 827ba6c3f..e2a388f96 100644 --- a/src/agents/models/chatcmpl_converter.py +++ b/src/agents/models/chatcmpl_converter.py @@ -207,7 +207,7 @@ def maybe_response_output_message(cls, item: Any) -> ResponseOutputMessageParam ): return cast(ResponseOutputMessageParam, item) return None - + @classmethod def maybe_reasoning_message(cls, item: Any) -> ResponseReasoningItemParam | None: if isinstance(item, dict) and item.get("type") == "reasoning":