hanzo-network¶
Agent network orchestration for distributed AI systems.
Installation¶
Overview¶
hanzo-network enables building distributed agent networks with:
- Topology Management - Define and manage agent network structures
- Device Capabilities - Track compute resources across nodes
- Partitioning Strategies - Distribute work across agents
- Local LLM Support - Run models locally for development
Quick Start¶
from hanzo_network.core import AgentNetwork, NetworkConfig
from hanzo_network.topology import RingMemoryWeightedPartitioningStrategy
# Create network
config = NetworkConfig(
name="my-network",
strategy=RingMemoryWeightedPartitioningStrategy(),
)
network = AgentNetwork(config)
# Add agents
network.add_agent("agent-1", capabilities={"memory": 16, "gpu": True})
network.add_agent("agent-2", capabilities={"memory": 8, "gpu": False})
# Route work
result = await network.route("Process this complex task")
Core Components¶
AgentNetwork¶
The main network orchestrator:
from hanzo_network.core import AgentNetwork, NetworkConfig
# Configuration
config = NetworkConfig(
name="production-network",
max_agents=100,
timeout=30.0,
retry_count=3,
)
# Create network
network = AgentNetwork(config)
# Add agents
network.add_agent(
agent_id="worker-1",
endpoint="http://localhost:8001",
capabilities={"memory": 32, "gpu": True, "cores": 8}
)
# Remove agents
network.remove_agent("worker-1")
# List agents
agents = network.list_agents()
# Get agent status
status = network.get_status("worker-1")
Router¶
Route requests to appropriate agents:
from hanzo_network.core import Router, RoutingStrategy
# Create router
router = Router(strategy=RoutingStrategy.ROUND_ROBIN)
# Route request
agent = router.route("Process this task")
# Available strategies
RoutingStrategy.ROUND_ROBIN # Cycle through agents
RoutingStrategy.LEAST_LOADED # Pick agent with lowest load
RoutingStrategy.CAPABILITY_MATCH # Match task to capabilities
RoutingStrategy.RANDOM # Random selection
Topology¶
Device Capabilities¶
Track and match device capabilities:
from hanzo_network.topology import DeviceCapabilities
# Define capabilities
caps = DeviceCapabilities(
memory_gb=32,
gpu_memory_gb=24,
cpu_cores=16,
gpu_available=True,
gpu_model="RTX 4090",
)
# Check if capable
can_run = caps.can_handle(
min_memory=16,
requires_gpu=True,
)
Partitioning Strategies¶
Distribute work across the network:
from hanzo_network.topology import (
RingMemoryWeightedPartitioningStrategy,
PartitioningStrategy,
)
# Memory-weighted ring partitioning
strategy = RingMemoryWeightedPartitioningStrategy()
# Partition data
partitions = strategy.partition(
data=large_dataset,
agents=network.list_agents(),
)
# Process partitions
for agent_id, partition in partitions.items():
await network.send(agent_id, partition)
Local LLM¶
Run models locally for development:
from hanzo_network.llm import LocalLLM
# Create local LLM
llm = LocalLLM(
model_path="/path/to/model",
context_size=4096,
)
# Generate response
response = await llm.generate(
prompt="Explain quantum computing",
max_tokens=500,
)
Tools¶
Memory Tool¶
Shared memory across the network:
from hanzo_network.tools import MemoryTool
memory = MemoryTool(network)
# Store data
await memory.store("key", {"data": "value"})
# Retrieve data
data = await memory.retrieve("key")
# Search
results = await memory.search("query")
Examples¶
Distributed Demo¶
from hanzo_network.core import AgentNetwork, NetworkConfig
from hanzo_network.topology import DeviceCapabilities
async def main():
# Create network
network = AgentNetwork(NetworkConfig(name="distributed"))
# Add workers with capabilities
for i in range(4):
caps = DeviceCapabilities(
memory_gb=16 + i * 8,
gpu_available=i % 2 == 0,
)
network.add_agent(f"worker-{i}", capabilities=caps)
# Distribute task
task = "Process large dataset"
results = await network.broadcast(task)
# Aggregate results
final = aggregate(results)
return final
Local LLM Demo¶
from hanzo_network.llm import LocalLLM
async def main():
# Setup local model
llm = LocalLLM(model_path="./models/llama-7b")
# Development queries
response = await llm.generate("Write a Python function to sort a list")
print(response)
Configuration¶
Environment Variables¶
| Variable | Default | Description |
|---|---|---|
HANZO_NETWORK_TIMEOUT |
30 |
Request timeout in seconds |
HANZO_NETWORK_RETRIES |
3 |
Max retry attempts |
HANZO_NETWORK_LOG_LEVEL |
INFO |
Logging level |
Network Config¶
NetworkConfig(
name="my-network", # Network identifier
max_agents=100, # Maximum agents
timeout=30.0, # Request timeout
retry_count=3, # Retry attempts
health_check_interval=60, # Health check frequency
load_balancing=True, # Enable load balancing
)
Architecture¶
┌─────────────────────────────────────────────────────────────┐
│ Agent Network │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Router │ │ Topology │ │
│ │ │ │ Manager │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ ┌────────▼────────────────────▼────────┐ │
│ │ Partitioning Strategy │ │
│ └──────────────────┬───────────────────┘ │
│ │ │
│ ┌──────────────────▼───────────────────┐ │
│ │ Agent Pool │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │Agent 1 │ │Agent 2 │ │Agent N │ │ │
│ │ └────────┘ └────────┘ └────────┘ │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Best Practices¶
- Capability Matching: Define accurate device capabilities for optimal routing
- Health Checks: Enable health checks to detect failed agents
- Retry Logic: Configure retries for transient failures
- Load Balancing: Use load-aware routing for production
- Local Development: Use LocalLLM for testing without network overhead