From 11920d0247a05628ede77bfd52741debca0c0d18 Mon Sep 17 00:00:00 2001 From: Ling-Sen Peng Date: Wed, 12 Aug 2026 16:03:04 -0700 Subject: [PATCH] Fix sub_results iteration in the skills examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sub_results is a dict keyed by agent name, so iterating it yields strings. 32_skills_multi_agent.py parallel died on the print — PARALLEL is the strategy that actually populates it: AttributeError: 'str' object has no attribute 'status' The other two call sites have the same bug and survived only because their sub_results was empty. Iterate .items() and print the agent name with its output. Verified against a 3.32.0-rc18 server: all 8 modes across both examples now complete, and parallel prints all three sub-agent outputs. --- examples/agents/30_skills_dg_review.py | 9 +++++---- examples/agents/32_skills_multi_agent.py | 14 ++++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/examples/agents/30_skills_dg_review.py b/examples/agents/30_skills_dg_review.py index 811d2789..f2f44ce4 100644 --- a/examples/agents/30_skills_dg_review.py +++ b/examples/agents/30_skills_dg_review.py @@ -70,11 +70,12 @@ def run_standalone(): print(f"Status: {result.status}") print(f"Tokens: {result.token_usage}") - # Sub-agent results are individually visible + # Sub-agent results are individually visible: a dict keyed by agent + # name — see AgentResult.sub_results. if result.sub_results: - print(f"\nSub-agent executions:") - for sub in result.sub_results: - print(f" - {sub.agent_name}: {sub.status} ({sub.token_usage})") + print(f"\nSub-agent outputs:") + for agent_name, agent_output in result.sub_results.items(): + print(f" - {agent_name}: {str(agent_output)[:120]}") # ── Example 2: Compose with regular agent in pipeline ────────────── diff --git a/examples/agents/32_skills_multi_agent.py b/examples/agents/32_skills_multi_agent.py index b529f3ea..134657fd 100644 --- a/examples/agents/32_skills_multi_agent.py +++ b/examples/agents/32_skills_multi_agent.py @@ -151,10 +151,11 @@ def example_pipeline(): print(f"Execution ID: {result.execution_id}") print(f"Status: {result.status}") print(f"Tokens: {result.token_usage}") + # sub_results is a dict keyed by agent name — see AgentResult.sub_results. if result.sub_results: - print("\nSub-agent executions:") - for sub in result.sub_results: - print(f" - {getattr(sub, "execution_id", "?")}: {sub.status}") + print("\nSub-agent outputs:") + for agent_name, agent_output in result.sub_results.items(): + print(f" - {agent_name}: {str(agent_output)[:120]}") result.print_result() @@ -213,10 +214,11 @@ def example_parallel(): print(f"Execution ID: {result.execution_id}") print(f"Status: {result.status}") print(f"Tokens: {result.token_usage}") + # sub_results is a dict keyed by agent name — see AgentResult.sub_results. if result.sub_results: - print("\nParallel sub-agent executions:") - for sub in result.sub_results: - print(f" - {getattr(sub, "execution_id", "?")}: {sub.status}") + print("\nParallel sub-agent outputs:") + for agent_name, agent_output in result.sub_results.items(): + print(f" - {agent_name}: {str(agent_output)[:120]}") result.print_result()