From ba09334d24ec1a5ba442f0734cb6f539f6901c22 Mon Sep 17 00:00:00 2001 From: Wen-Tien Chang Date: Thu, 11 Sep 2025 23:27:56 +0800 Subject: [PATCH 1/3] fix(handoff_filters): also drop ReasoningItem in remove_all_tools for store=False handoffs to avoid API item not found error --- src/agents/extensions/handoff_filters.py | 2 ++ tests/test_extension_filters.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/agents/extensions/handoff_filters.py b/src/agents/extensions/handoff_filters.py index 4abe99a45..a4433ae0c 100644 --- a/src/agents/extensions/handoff_filters.py +++ b/src/agents/extensions/handoff_filters.py @@ -4,6 +4,7 @@ from ..items import ( HandoffCallItem, HandoffOutputItem, + ReasoningItem, RunItem, ToolCallItem, ToolCallOutputItem, @@ -41,6 +42,7 @@ def _remove_tools_from_items(items: tuple[RunItem, ...]) -> tuple[RunItem, ...]: or isinstance(item, HandoffOutputItem) or isinstance(item, ToolCallItem) or isinstance(item, ToolCallOutputItem) + or isinstance(item, ReasoningItem) ): continue filtered_items.append(item) diff --git a/tests/test_extension_filters.py b/tests/test_extension_filters.py index 3c2ba9e4f..fef38640a 100644 --- a/tests/test_extension_filters.py +++ b/tests/test_extension_filters.py @@ -5,6 +5,7 @@ from agents.items import ( HandoffOutputItem, MessageOutputItem, + ReasoningItem, ToolCallOutputItem, TResponseInputItem, ) @@ -77,6 +78,12 @@ def _get_handoff_output_run_item(content: str) -> HandoffOutputItem: ) +def _get_reasoning_output_run_item() -> ReasoningItem: + return ReasoningItem( + agent=fake_agent(), raw_item={"id": "rid", "summary": [], "type": "reasoning"} + ) + + def test_empty_data(): handoff_input_data = HandoffInputData( input_history=(), @@ -165,10 +172,12 @@ def test_removes_tools_from_new_items_and_history(): _get_message_input_item("Hello2"), ), pre_handoff_items=( + _get_reasoning_output_run_item(), _get_message_output_run_item("123"), _get_tool_output_run_item("456"), ), new_items=( + _get_reasoning_output_run_item(), _get_message_output_run_item("Hello"), _get_tool_output_run_item("World"), ), @@ -187,11 +196,13 @@ def test_removes_handoffs_from_history(): _get_handoff_input_item("World"), ), pre_handoff_items=( + _get_reasoning_output_run_item(), _get_message_output_run_item("Hello"), _get_tool_output_run_item("World"), _get_handoff_output_run_item("World"), ), new_items=( + _get_reasoning_output_run_item(), _get_message_output_run_item("Hello"), _get_tool_output_run_item("World"), _get_handoff_output_run_item("World"), From 866811d70d613c7c11d7ccc986d3f75eba175e4a Mon Sep 17 00:00:00 2001 From: Wen-Tien Chang Date: Tue, 16 Sep 2025 20:19:43 +0800 Subject: [PATCH 2/3] fix(tests): use ResponseReasoningItem instead of dict for reasoning item raw data --- tests/test_extension_filters.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_extension_filters.py b/tests/test_extension_filters.py index fef38640a..2d9e53351 100644 --- a/tests/test_extension_filters.py +++ b/tests/test_extension_filters.py @@ -1,4 +1,5 @@ from openai.types.responses import ResponseOutputMessage, ResponseOutputText +from openai.types.responses.response_reasoning_item import ResponseReasoningItem from agents import Agent, HandoffInputData, RunContextWrapper from agents.extensions.handoff_filters import remove_all_tools @@ -80,7 +81,7 @@ def _get_handoff_output_run_item(content: str) -> HandoffOutputItem: def _get_reasoning_output_run_item() -> ReasoningItem: return ReasoningItem( - agent=fake_agent(), raw_item={"id": "rid", "summary": [], "type": "reasoning"} + agent=fake_agent(), raw_item=ResponseReasoningItem(id="rid", summary=[], type="reasoning") ) From e62ea2f00dfe0d692140198ae31219b5d78d0d8a Mon Sep 17 00:00:00 2001 From: Wen-Tien Chang Date: Tue, 16 Sep 2025 21:28:01 +0800 Subject: [PATCH 3/3] fix(tests): include reasoning items in handoff filter tests --- tests/test_extension_filters.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/test_extension_filters.py b/tests/test_extension_filters.py index 2d9e53351..11fba51ba 100644 --- a/tests/test_extension_filters.py +++ b/tests/test_extension_filters.py @@ -25,6 +25,10 @@ def _get_message_input_item(content: str) -> TResponseInputItem: } +def _get_reasoning_input_item() -> TResponseInputItem: + return {"id": "rid", "summary": [], "type": "reasoning"} + + def _get_function_result_input_item(content: str) -> TResponseInputItem: return { "call_id": "1", @@ -169,6 +173,7 @@ def test_removes_tools_from_new_items_and_history(): handoff_input_data = HandoffInputData( input_history=( _get_message_input_item("Hello1"), + _get_reasoning_input_item(), _get_function_result_input_item("World"), _get_message_input_item("Hello2"), ), @@ -185,7 +190,7 @@ def test_removes_tools_from_new_items_and_history(): run_context=RunContextWrapper(context=()), ) filtered_data = remove_all_tools(handoff_input_data) - assert len(filtered_data.input_history) == 2 + assert len(filtered_data.input_history) == 3 assert len(filtered_data.pre_handoff_items) == 1 assert len(filtered_data.new_items) == 1