diff --git a/src/google/adk/agents/loop_agent.py b/src/google/adk/agents/loop_agent.py index e58227864..72157a830 100644 --- a/src/google/adk/agents/loop_agent.py +++ b/src/google/adk/agents/loop_agent.py @@ -53,15 +53,10 @@ async def _run_async_impl( times_looped = 0 while not self.max_iterations or times_looped < self.max_iterations: for sub_agent in self.sub_agents: - should_exit = False async for event in sub_agent.run_async(ctx): yield event if event.actions.escalate: - should_exit = True - - if should_exit: - return - + return times_looped += 1 return diff --git a/src/google/adk/tools/exit_loop_tool.py b/src/google/adk/tools/exit_loop_tool.py index 200b66e5d..181dc7e90 100644 --- a/src/google/adk/tools/exit_loop_tool.py +++ b/src/google/adk/tools/exit_loop_tool.py @@ -21,4 +21,3 @@ def exit_loop(tool_context: ToolContext): Call this function only when you are instructed to do so. """ tool_context.actions.escalate = True - tool_context.actions.skip_summarization = True diff --git a/tests/unittests/agents/test_loop_agent.py b/tests/unittests/agents/test_loop_agent.py index a69a9ddf3..c571b67ae 100644 --- a/tests/unittests/agents/test_loop_agent.py +++ b/tests/unittests/agents/test_loop_agent.py @@ -68,13 +68,6 @@ async def _run_async_impl( ), actions=EventActions(escalate=True), ) - yield Event( - author=self.name, - invocation_id=ctx.invocation_id, - content=types.Content( - parts=[types.Part(text=f'I have done my job after escalation!!')] - ), - ) async def _create_parent_invocation_context( @@ -122,12 +115,9 @@ async def test_run_async_with_escalate_action(request: pytest.FixtureRequest): escalating_agent = _TestingAgentWithEscalateAction( name=f'{request.function.__name__}_test_escalating_agent' ) - ignored_agent = _TestingAgent( - name=f'{request.function.__name__}_test_ignored_agent' - ) loop_agent = LoopAgent( name=f'{request.function.__name__}_test_loop_agent', - sub_agents=[non_escalating_agent, escalating_agent, ignored_agent], + sub_agents=[non_escalating_agent, escalating_agent], ) parent_ctx = await _create_parent_invocation_context( request.function.__name__, loop_agent @@ -135,7 +125,7 @@ async def test_run_async_with_escalate_action(request: pytest.FixtureRequest): events = [e async for e in loop_agent.run_async(parent_ctx)] # Only two events are generated because the sub escalating_agent escalates. - assert len(events) == 3 + assert len(events) == 2 assert events[0].author == non_escalating_agent.name assert events[1].author == escalating_agent.name assert events[0].content.parts[0].text == ( @@ -144,6 +134,3 @@ async def test_run_async_with_escalate_action(request: pytest.FixtureRequest): assert events[1].content.parts[0].text == ( f'Hello, async {escalating_agent.name}!' ) - assert ( - events[2].content.parts[0].text == 'I have done my job after escalation!!' - ) diff --git a/tests/unittests/flows/llm_flows/test_agent_transfer.py b/tests/unittests/flows/llm_flows/test_agent_transfer.py index 4cb48c845..4243fdc4e 100644 --- a/tests/unittests/flows/llm_flows/test_agent_transfer.py +++ b/tests/unittests/flows/llm_flows/test_agent_transfer.py @@ -303,9 +303,11 @@ def test_auto_to_loop(): name='exit_loop', response={'result': None} ), ), + # root_agent summarizes. + ('root_agent', 'response4'), ] # root_agent should still be the current agent because sub_agent_1 is loop. assert testing_utils.simplify_events(runner.run('test2')) == [ - ('root_agent', 'response4'), + ('root_agent', 'response5'), ]