mirror of
https://github.com/encounter/adk-python.git
synced 2026-07-09 18:19:28 -07:00
fix: allows current sub-agent to finish execution before exiting the loop agent due to a sub-agent's escalation. This commit also disables the summarization for exit_loop tool
Fixes #423 Related to #1670 - This avoids the `GeneratorExit` error thrown, which would crash OTel metric collection and cause `Failed to detach context` error. - This also allows all function calls are processed when exit_loop is called together with other tools in the same LLmResponse. A sample agent for testing: ``` from google.adk import Agent from google.adk.agents.loop_agent import LoopAgent from google.adk.tools.exit_loop_tool import exit_loop worker_1 = Agent( name='worker_1', description='Worker 1', instruction="""\ Just say job #1 is done. If job #1 is said to be done. Call exit_loop tool.""", tools=[exit_loop], ) worker_2 = Agent( name='worker_2', description='Worker 2', instruction="""\ Just say job #2 is done. If job #2 is said to be done. Call exit_loop tool.""", tools=[exit_loop], ) work_agent = LoopAgent( name='work_agent', description='Do all work.', sub_agents=[worker_1, worker_2], max_iterations=5, ) root_agent = Agent( model='gemini-2.0-flash', name='hello_world_agent', description='hello world agent that can roll a check prime', instruction="""Hand off works to sub agents.""", sub_agents=[work_agent], ) ``` PiperOrigin-RevId: 785538101
This commit is contained in:
committed by
Copybara-Service
parent
96a0d4b02c
commit
2aab1cf98e
@@ -53,10 +53,15 @@ class LoopAgent(BaseAgent):
|
||||
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:
|
||||
return
|
||||
should_exit = True
|
||||
|
||||
if should_exit:
|
||||
return
|
||||
|
||||
times_looped += 1
|
||||
return
|
||||
|
||||
|
||||
@@ -21,3 +21,4 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user