diff --git a/tests/agents/core/test_tools_processor.py b/tests/agents/core/test_tools_processor.py index ce35acec..32f70005 100644 --- a/tests/agents/core/test_tools_processor.py +++ b/tests/agents/core/test_tools_processor.py @@ -23,6 +23,10 @@ def _compat_get_skill_processor_parameters(agent_context): _skills_pkg.get_skill_processor_parameters = _compat_get_skill_processor_parameters from trpc_agent_sdk.agents._base_agent import BaseAgent +from trpc_agent_sdk.agents.core._history_processor import ( + HistoryProcessor, + TimelineFilterMode, +) from trpc_agent_sdk.agents.core._tools_processor import ToolsProcessor from trpc_agent_sdk.context import InvocationContext, create_agent_context from trpc_agent_sdk.events import Event, EventActions @@ -218,15 +222,64 @@ def test_multiple_events_merged(self): e1 = Event( invocation_id="inv-1", author="agent", - content=Content(role="user", parts=[Part(text="r1")]), + content=Content( + role="user", + parts=[ + Part.from_function_response( + name="tool-1", + response={"result": "r1"}, + ) + ], + ), ) e2 = Event( invocation_id="inv-1", author="agent", - content=Content(role="user", parts=[Part(text="r2")]), + content=Content( + role="user", + parts=[ + Part.from_function_response( + name="tool-2", + response={"result": "r2"}, + ) + ], + ), ) result = proc._merge_parallel_function_response_events([e1, e2]) + assert result.invocation_id == "inv-1" assert len(result.content.parts) == 2 + assert [ + part.function_response.name for part in result.content.parts + ] == ["tool-1", "tool-2"] + + def test_merged_event_survives_invocation_timeline_filter( + self, + invocation_context, + ): + proc = ToolsProcessor([]) + events = [ + Event( + invocation_id=invocation_context.invocation_id, + author="agent", + content=Content( + role="user", + parts=[ + Part.from_function_response( + name=f"tool-{index}", + response={"result": index}, + ) + ], + ), + ) + for index in range(2) + ] + + merged = proc._merge_parallel_function_response_events(events) + history = HistoryProcessor( + timeline_filter_mode=TimelineFilterMode.INVOCATION, + ) + + assert history.filter_events(invocation_context, [merged]) == [merged] def test_empty_events_raises(self): proc = ToolsProcessor([]) diff --git a/trpc_agent_sdk/agents/core/_tools_processor.py b/trpc_agent_sdk/agents/core/_tools_processor.py index 7ec9bfb1..67f83915 100644 --- a/trpc_agent_sdk/agents/core/_tools_processor.py +++ b/trpc_agent_sdk/agents/core/_tools_processor.py @@ -714,7 +714,7 @@ def _merge_parallel_function_response_events(self, function_response_events: Lis # Create the new merged event merged_event = Event( - invocation_id=Event.new_id(), + invocation_id=base_event.invocation_id, author=base_event.author, content=Content(role="user", parts=merged_parts), actions=merged_actions,