in src/smolagents/monitoring.py [0:0]
def visualize_agent_tree(self, agent):
def create_tools_section(tools_dict):
table = Table(show_header=True, header_style="bold")
table.add_column("Name", style="#1E90FF")
table.add_column("Description")
table.add_column("Arguments")
for name, tool in tools_dict.items():
args = [
f"{arg_name} (`{info.get('type', 'Any')}`{', optional' if info.get('optional') else ''}): {info.get('description', '')}"
for arg_name, info in getattr(tool, "inputs", {}).items()
]
table.add_row(name, getattr(tool, "description", str(tool)), "\n".join(args))
return Group("🛠️ [italic #1E90FF]Tools:[/italic #1E90FF]", table)
def get_agent_headline(agent, name: str | None = None):
name_headline = f"{name} | " if name else ""
return f"[bold {YELLOW_HEX}]{name_headline}{agent.__class__.__name__} | {agent.model.model_id}"
def build_agent_tree(parent_tree, agent_obj):
"""Recursively builds the agent tree."""
parent_tree.add(create_tools_section(agent_obj.tools))
if agent_obj.managed_agents:
agents_branch = parent_tree.add("🤖 [italic #1E90FF]Managed agents:")
for name, managed_agent in agent_obj.managed_agents.items():
agent_tree = agents_branch.add(get_agent_headline(managed_agent, name))
if managed_agent.__class__.__name__ == "CodeAgent":
agent_tree.add(
f"✅ [italic #1E90FF]Authorized imports:[/italic #1E90FF] {managed_agent.additional_authorized_imports}"
)
agent_tree.add(f"📝 [italic #1E90FF]Description:[/italic #1E90FF] {managed_agent.description}")
build_agent_tree(agent_tree, managed_agent)
main_tree = Tree(get_agent_headline(agent))
if agent.__class__.__name__ == "CodeAgent":
main_tree.add(
f"✅ [italic #1E90FF]Authorized imports:[/italic #1E90FF] {agent.additional_authorized_imports}"
)
build_agent_tree(main_tree, agent)
self.console.print(main_tree)