Files
python-sdk/pkg/hanzo-agent/examples/network_example.py
T
zooqueenandHanzo Dev b144973bfc fix(lint): resolve all ruff + black errors across all packages
Fix 35 ruff errors (E722, F841, B904, B905, B007, E741, S202, S310,
S306, S110, TID251, UP042, F401) and run black on 526 files.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 23:32:32 -08:00

326 lines
9.9 KiB
Python

"""Example demonstrating agent networks with routing and state sharing."""
import asyncio
from typing import Any, Dict
from agents import (
Agent,
AgentNetwork,
NetworkConfig,
SemanticRouter,
RuleBasedRouter,
routing_strategy,
InMemoryStateStore,
Memory,
MemoryType,
Orchestrator,
OrchestrationConfig,
function_tool,
Runner,
)
# Define specialized agents
research_agent = Agent(
name="research_agent",
instructions="""You are a research specialist. You excel at:
- Finding information on any topic
- Analyzing data and trends
- Summarizing complex information
- Providing citations and sources
When you receive a research request, provide thorough, well-sourced information.""",
handoff_description="Handles research, data gathering, and analysis tasks",
)
writer_agent = Agent(
name="writer_agent",
instructions="""You are a writing specialist. You excel at:
- Creating engaging content
- Adapting tone and style
- Structuring documents
- Editing and proofreading
When you receive a writing request, create polished, well-structured content.""",
handoff_description="Handles content creation, editing, and writing tasks",
)
coder_agent = Agent(
name="coder_agent",
instructions="""You are a coding specialist. You excel at:
- Writing clean, efficient code
- Debugging and optimization
- System design and architecture
- Code reviews and best practices
When you receive a coding request, provide working, well-documented solutions.""",
handoff_description="Handles programming, debugging, and technical implementation",
)
coordinator_agent = Agent(
name="coordinator_agent",
instructions="""You are a project coordinator. You:
- Break down complex tasks
- Delegate to appropriate specialists
- Ensure quality and consistency
- Synthesize results from multiple agents
Analyze each request and coordinate with the right specialists.""",
handoff_description="Main coordinator that delegates tasks to specialists",
)
# Tools for agents
@function_tool
async def save_to_memory(ctx, key: str, value: str) -> str:
"""Save information to shared memory for other agents to access."""
# Access network context
if hasattr(ctx, "network"):
await ctx.set_state(key, value, namespace="shared")
return f"Saved '{key}' to shared memory"
return "Memory not available"
@function_tool
async def recall_from_memory(ctx, key: str) -> str:
"""Recall information from shared memory."""
if hasattr(ctx, "network"):
value = await ctx.get_state(key, namespace="shared")
if value:
return f"Retrieved from memory: {value}"
return f"No memory found for key '{key}'"
return "Memory not available"
@function_tool
async def list_memories(ctx) -> str:
"""List all keys in shared memory."""
if hasattr(ctx, "network"):
keys = await ctx.state_store.keys(namespace="shared")
if keys:
return f"Memory keys: {', '.join(keys)}"
return "No memories stored"
return "Memory not available"
# Add tools to agents
research_agent.tools = [save_to_memory, recall_from_memory, list_memories]
writer_agent.tools = [save_to_memory, recall_from_memory, list_memories]
coder_agent.tools = [save_to_memory, recall_from_memory, list_memories]
coordinator_agent.tools = [save_to_memory, recall_from_memory, list_memories]
async def basic_network_example():
"""Basic example of agent network with semantic routing."""
print("=== Basic Network Example ===\n")
# Create network with semantic router
network = AgentNetwork(
config=NetworkConfig(name="Research Network"),
router=SemanticRouter(),
)
# Add agents with capabilities
network.add_agent(
research_agent,
capabilities=["research", "analysis", "data", "information"],
)
network.add_agent(
writer_agent,
capabilities=["writing", "content", "editing", "documentation"],
)
network.add_agent(
coder_agent,
capabilities=["coding", "programming", "debugging", "implementation"],
)
# Test routing
queries = [
"Research the latest trends in AI",
"Write a blog post about climate change",
"Debug this Python function that's not working",
]
for query in queries:
print(f"Query: {query}")
result = await network.run(input=query, max_turns=1)
print(f"Response: {result.final_output}\n")
async def advanced_network_with_rules():
"""Advanced example with rule-based routing and state sharing."""
print("\n=== Advanced Network with Rules ===\n")
# Create router with rules
router = RuleBasedRouter()
router.add_rule(r"research|analyze|find", "research_agent", priority=10)
router.add_rule(r"write|draft|compose", "writer_agent", priority=10)
router.add_rule(r"code|program|debug|implement", "coder_agent", priority=10)
# Create network with state store
state_store = InMemoryStateStore()
network = AgentNetwork(
config=NetworkConfig(
name="Advanced Network",
state_store=state_store,
),
router=router,
)
# Add agents
network.add_agent(research_agent)
network.add_agent(writer_agent)
network.add_agent(coder_agent)
# Complex task that requires multiple agents
print("Task: Research AI trends and write a technical blog post\n")
# Step 1: Research
result1 = await network.run(
input="Research the top 3 AI trends in 2024 and save them to memory",
starting_agent="research_agent",
)
print(f"Research complete: {result1.final_output}\n")
# Step 2: Write based on research
result2 = await network.run(
input="Recall the AI trends from memory and write a technical blog post about them",
starting_agent="writer_agent",
)
print(f"Blog post: {result2.final_output}\n")
async def orchestrated_workflow_example():
"""Example using the orchestrator for complex workflows."""
print("\n=== Orchestrated Workflow Example ===\n")
# Create orchestrator
orchestrator = Orchestrator(
config=OrchestrationConfig(
name="AI Project Orchestrator",
enable_ui_streaming=True,
),
)
# Register agents
orchestrator.register_agent(coordinator_agent, capabilities=["coordination"])
orchestrator.register_agent(research_agent, capabilities=["research"])
orchestrator.register_agent(writer_agent, capabilities=["writing"])
orchestrator.register_agent(coder_agent, capabilities=["coding"])
# Create a workflow
workflow = orchestrator.create_workflow_from_agents(
name="AI Article Workflow",
agents=["coordinator_agent"],
)
# Register and execute workflow
orchestrator.register_workflow(workflow)
result = await orchestrator.execute_workflow(
workflow_id=workflow.id,
input="""Create a comprehensive guide about implementing
a simple neural network in Python. Include:
1. Research on neural network basics
2. Code implementation
3. Well-written explanation
""",
)
print(f"Workflow completed: {result.success}")
print(f"Duration: {result.duration:.2f}s")
print(f"Output: {result.output}")
async def memory_system_example():
"""Example demonstrating the memory system."""
print("\n=== Memory System Example ===\n")
# Create memory system
memory = Memory(max_entries=100)
# Create memory-enabled agent
memory_agent = Agent(
name="memory_agent",
instructions="""You are an agent with long-term memory.
You can remember facts, conversations, and learn from experience.
Always check your memory before responding.""",
)
# Wrap with memory capabilities
memory_enabled = memory.create_agent_wrapper(memory_agent)
# Store some memories
await memory.remember(
"The user's favorite color is blue",
type=MemoryType.FACT,
agent_name="memory_agent",
)
await memory.remember(
"The user is interested in machine learning",
type=MemoryType.FACT,
agent_name="memory_agent",
)
# Test memory recall
result = await Runner.run(
starting_agent=memory_enabled,
input="What do you remember about me?",
)
print(f"Memory recall: {result.final_output}")
# Generate reflection
reflection = await memory.reflect(memory_agent)
print(f"\nReflection: {reflection.content}")
async def parallel_network_example():
"""Example of parallel task execution in a network."""
print("\n=== Parallel Network Execution ===\n")
# Create network
network = AgentNetwork(
config=NetworkConfig(
name="Parallel Network",
enable_parallel_execution=True,
max_parallel_agents=3,
),
)
# Add agents
network.add_agent(research_agent)
network.add_agent(writer_agent)
network.add_agent(coder_agent)
# Define parallel tasks
tasks = [
{"input": "Research quantum computing basics", "agent": "research_agent"},
{"input": "Write a haiku about technology", "agent": "writer_agent"},
{"input": "Implement a fibonacci function", "agent": "coder_agent"},
]
print("Running 3 tasks in parallel...\n")
start_time = asyncio.get_event_loop().time()
results = await network.run_parallel(tasks)
duration = asyncio.get_event_loop().time() - start_time
for i, result in enumerate(results):
print(f"Task {i+1} result: {result.final_output[:100]}...")
print(f"\nTotal execution time: {duration:.2f}s")
async def main():
"""Run all examples."""
await basic_network_example()
await advanced_network_with_rules()
await orchestrated_workflow_example()
await memory_system_example()
await parallel_network_example()
if __name__ == "__main__":
asyncio.run(main())