@@ -34,14 +34,16 @@ class AgentInfo(pydantic.BaseModel):
3434 sub_agents : list [str ]
3535
3636
37- def get_tools_info (tools : list [ToolUnion ]) -> list [Any ]:
37+ async def get_tools_info (tools : list [ToolUnion ]) -> list [Any ]:
3838 """Returns the info for a given list of tools."""
3939 final_tools = []
4040 for tool in tools :
4141 if isinstance (tool , BaseTool ):
4242 final_tools .append (tool )
4343 elif isinstance (tool , BaseToolset ):
44- final_tools .extend (tool .get_tools ())
44+ # Await the async coroutine call natively!
45+ tools_res = await tool .get_tools ()
46+ final_tools .extend (tools_res )
4547 else :
4648 final_tools .append (FunctionTool (tool ))
4749 return [
@@ -51,27 +53,27 @@ def get_tools_info(tools: list[ToolUnion]) -> list[Any]:
5153 ]
5254
5355
54- def get_agents_dict (agent : LlmAgent ) -> dict [str , AgentInfo ]:
56+ async def get_agents_dict (agent : LlmAgent ) -> dict [str , AgentInfo ]:
5557 """Returns a dict with info for the agent and its sub-agents."""
5658 agents_dict = {}
5759
58- def _traverse (current_agent : LlmAgent ):
60+ async def _traverse (current_agent : LlmAgent ):
5961 if current_agent .name in agents_dict :
6062 return
6163
6264 sub_agent_names = []
6365 for sub_agent in current_agent .sub_agents :
6466 if isinstance (sub_agent , LlmAgent ):
65- _traverse (sub_agent )
67+ await _traverse (sub_agent )
6668 sub_agent_names .append (sub_agent .name )
6769
6870 agents_dict [current_agent .name ] = AgentInfo (
6971 name = current_agent .name ,
7072 description = current_agent .description ,
7173 instruction = current_agent .instruction ,
72- tools = get_tools_info (current_agent .tools ),
74+ tools = await get_tools_info (current_agent .tools ),
7375 sub_agents = sub_agent_names ,
7476 )
7577
76- _traverse (agent )
78+ await _traverse (agent )
7779 return agents_dict
0 commit comments