"""
Pattern 281: Meta-Agent Pattern
Purpose: Agent that creates, manages, and coordinates other agents dynamically
"""
from typing import Dict, Any, List, Optional, Set, Callable
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
from collections import defaultdict
class AgentType(Enum):
"""Type of managed agent."""
WORKER = "worker"
SPECIALIST = "specialist"
COORDINATOR = "coordinator"
ANALYZER = "analyzer"
EXECUTOR = "executor"
class AgentStatus(Enum):
"""Status of managed agent."""
IDLE = "idle"
BUSY = "busy"
FAILED = "failed"
TERMINATED = "terminated"
@dataclass
class ManagedAgent:
"""Represents an agent managed by the meta-agent."""
agent_id: str
agent_type: AgentType
capabilities: Set[str]
status: AgentStatus = AgentStatus.IDLE
created_at: datetime = field(default_factory=datetime.now)
tasks_completed: int = 0
tasks_failed: int = 0
last_activity: Optional[datetime] = None
metadata: Dict[str, Any] = field(default_factory=dict)
@dataclass
class TaskAssignment:
"""Task assigned to an agent."""
task_id: str
agent_id: str
task_description: str
required_capability: str
assigned_at: datetime = field(default_factory=datetime.now)
completed_at: Optional[datetime] = None
result: Optional[Any] = None
success: bool = False
class MetaAgent:
"""
Implements meta-agent pattern.
Features:
- Dynamic agent creation and termination
- Agent capability management
- Intelligent task routing
- Load balancing across agents
- Agent performance monitoring
- Automatic agent spawning based on demand
"""
def __init__(self):
self.agents: Dict[str, ManagedAgent] = {}
self.tasks: Dict[str, TaskAssignment] = {}
self.capability_registry: Dict[str, Set[str]] = defaultdict(set)
# Statistics
self.statistics = {
"total_agents_created": 0,
"active_agents": 0,
"total_tasks_assigned": 0,
"total_tasks_completed": 0,
"total_tasks_failed": 0
}
def create_agent(
self,
agent_type: AgentType,
capabilities: Set[str],
metadata: Dict[str, Any] = None
) -> Dict[str, Any]:
"""
Create a new managed agent.
Args:
agent_type: Type of agent to create
capabilities: Set of capabilities the agent has
metadata: Additional metadata
Returns:
Agent creation status and ID
"""
agent_id = f"agent-{len(self.agents) + 1:04d}"
agent = ManagedAgent(
agent_id=agent_id,
agent_type=agent_type,
capabilities=capabilities,
metadata=metadata or {}
)
self.agents[agent_id] = agent
# Register capabilities
for capability in capabilities:
self.capability_registry[capability].add(agent_id)
self.statistics["total_agents_created"] += 1
self.statistics["active_agents"] += 1
return {
"success": True,
"agent_id": agent_id,
"agent_type": agent_type.value,
"capabilities": list(capabilities),
"message": f"Agent '{agent_id}' created with {len(capabilities)} capabilities"
}
def terminate_agent(self, agent_id: str) -> Dict[str, Any]:
"""
Terminate a managed agent.
Args:
agent_id: ID of agent to terminate
Returns:
Termination status
"""
if agent_id not in self.agents:
return {
"success": False,
"message": f"Agent '{agent_id}' not found"
}
agent = self.agents[agent_id]
# Remove from capability registry
for capability in agent.capabilities:
self.capability_registry[capability].discard(agent_id)
agent.status = AgentStatus.TERMINATED
self.statistics["active_agents"] -= 1
return {
"success": True,
"agent_id": agent_id,
"tasks_completed": agent.tasks_completed,
"tasks_failed": agent.tasks_failed,
"message": f"Agent '{agent_id}' terminated"
}
def assign_task(
self,
task_description: str,
required_capability: str
) -> Dict[str, Any]:
"""
Assign task to most suitable agent.
Args:
task_description: Description of task
required_capability: Capability needed for task
Returns:
Task assignment status
"""
# Find agents with required capability
candidate_agent_ids = self.capability_registry.get(required_capability, set())
if not candidate_agent_ids:
return {
"success": False,
"message": f"No agent available with capability '{required_capability}'"
}
# Filter idle agents
idle_agents = [
aid for aid in candidate_agent_ids
if self.agents[aid].status == AgentStatus.IDLE
]
if not idle_agents:
# All agents busy, pick least loaded
agent_id = min(
candidate_agent_ids,
key=lambda aid: self.agents[aid].tasks_completed - self.agents[aid].tasks_failed
)
else:
# Pick idle agent with best track record
agent_id = max(
idle_agents,
key=lambda aid: self.agents[aid].tasks_completed
)
# Create task assignment
task_id = f"task-{len(self.tasks) + 1:04d}"
assignment = TaskAssignment(
task_id=task_id,
agent_id=agent_id,
task_description=task_description,
required_capability=required_capability
)
self.tasks[task_id] = assignment
# Update agent status
agent = self.agents[agent_id]
agent.status = AgentStatus.BUSY
agent.last_activity = datetime.now()
self.statistics["total_tasks_assigned"] += 1
return {
"success": True,
"task_id": task_id,
"agent_id": agent_id,
"agent_type": agent.agent_type.value,
"message": f"Task '{task_id}' assigned to '{agent_id}'"
}
def complete_task(
self,
task_id: str,
result: Any = None,
success: bool = True
) -> Dict[str, Any]:
"""
Mark task as completed.
Args:
task_id: Task ID
result: Task result
success: Whether task succeeded
Returns:
Completion status
"""
if task_id not in self.tasks:
return {
"success": False,
"message": f"Task '{task_id}' not found"
}
assignment = self.tasks[task_id]
assignment.completed_at = datetime.now()
assignment.result = result
assignment.success = success
# Update agent
agent = self.agents[assignment.agent_id]
agent.status = AgentStatus.IDLE
agent.last_activity = datetime.now()
if success:
agent.tasks_completed += 1
self.statistics["total_tasks_completed"] += 1
else:
agent.tasks_failed += 1
self.statistics["total_tasks_failed"] += 1
agent.status = AgentStatus.FAILED
return {
"success": True,
"task_id": task_id,
"agent_id": assignment.agent_id,
"task_success": success,
"duration_seconds": (assignment.completed_at - assignment.assigned_at).total_seconds(),
"message": f"Task '{task_id}' {'completed' if success else 'failed'}"
}
def scale_agents(
self,
required_capability: str,
target_count: int,
agent_type: AgentType = AgentType.WORKER
) -> Dict[str, Any]:
"""
Scale number of agents with specific capability.
Args:
required_capability: Capability to scale for
target_count: Target number of agents
agent_type: Type of agents to create
Returns:
Scaling operation status
"""
current_agents = self.capability_registry.get(required_capability, set())
current_count = len(current_agents)
if current_count == target_count:
return {
"success": True,
"action": "none",
"current_count": current_count,
"message": f"Already at target count of {target_count} agents"
}
elif current_count Dict[str, Any]:
"""Get detailed agent status."""
if agent_id not in self.agents:
return {
"success": False,
"message": f"Agent '{agent_id}' not found"
}
agent = self.agents[agent_id]
# Find assigned tasks
assigned_tasks = [
t.task_id for t in self.tasks.values()
if t.agent_id == agent_id and t.completed_at is None
]
return {
"success": True,
"agent_id": agent_id,
"agent_type": agent.agent_type.value,
"status": agent.status.value,
"capabilities": list(agent.capabilities),
"tasks_completed": agent.tasks_completed,
"tasks_failed": agent.tasks_failed,
"success_rate": (agent.tasks_completed / (agent.tasks_completed + agent.tasks_failed)
if (agent.tasks_completed + agent.tasks_failed) > 0 else 0.0),
"assigned_tasks": assigned_tasks,
"last_activity": agent.last_activity.isoformat() if agent.last_activity else None
}
def list_agents(
self,
agent_type: Optional[AgentType] = None,
status: Optional[AgentStatus] = None
) -> Dict[str, Any]:
"""List agents with optional filters."""
agents_list = []
for agent_id, agent in self.agents.items():
if agent_type and agent.agent_type != agent_type:
continue
if status and agent.status != status:
continue
agents_list.append({
"agent_id": agent_id,
"agent_type": agent.agent_type.value,
"status": agent.status.value,
"capabilities": list(agent.capabilities),
"tasks_completed": agent.tasks_completed
})
return {
"total": len(agents_list),
"agents": agents_list
}
def get_statistics(self) -> Dict[str, Any]:
"""Get meta-agent statistics."""
# Calculate additional metrics
idle_count = sum(1 for a in self.agents.values() if a.status == AgentStatus.IDLE)
busy_count = sum(1 for a in self.agents.values() if a.status == AgentStatus.BUSY)
failed_count = sum(1 for a in self.agents.values() if a.status == AgentStatus.FAILED)
return {
"total_agents_created": self.statistics["total_agents_created"],
"active_agents": self.statistics["active_agents"],
"idle_agents": idle_count,
"busy_agents": busy_count,
"failed_agents": failed_count,
"total_tasks_assigned": self.statistics["total_tasks_assigned"],
"total_tasks_completed": self.statistics["total_tasks_completed"],
"total_tasks_failed": self.statistics["total_tasks_failed"],
"overall_success_rate": (self.statistics["total_tasks_completed"] /
self.statistics["total_tasks_assigned"]
if self.statistics["total_tasks_assigned"] > 0 else 0.0),
"registered_capabilities": len(self.capability_registry)
}
class MetaAgentPattern:
"""
Coordinator for meta-agent pattern.
Manages agent lifecycle and coordination.
"""
def __init__(self):
self.meta_agent = MetaAgent()
def create_agent(self, agent_type: AgentType, capabilities: Set[str], metadata: Dict[str, Any] = None) -> Dict[str, Any]:
"""Create agent."""
return self.meta_agent.create_agent(agent_type, capabilities, metadata)
def terminate_agent(self, agent_id: str) -> Dict[str, Any]:
"""Terminate agent."""
return self.meta_agent.terminate_agent(agent_id)
def assign_task(self, task_description: str, required_capability: str) -> Dict[str, Any]:
"""Assign task."""
return self.meta_agent.assign_task(task_description, required_capability)
def complete_task(self, task_id: str, result: Any = None, success: bool = True) -> Dict[str, Any]:
"""Complete task."""
return self.meta_agent.complete_task(task_id, result, success)
def scale_agents(self, required_capability: str, target_count: int, agent_type: AgentType = AgentType.WORKER) -> Dict[str, Any]:
"""Scale agents."""
return self.meta_agent.scale_agents(required_capability, target_count, agent_type)
def get_agent_status(self, agent_id: str) -> Dict[str, Any]:
"""Get agent status."""
return self.meta_agent.get_agent_status(agent_id)
def list_agents(self) -> Dict[str, Any]:
"""List agents."""
return self.meta_agent.list_agents()
def get_statistics(self) -> Dict[str, Any]:
"""Get statistics."""
return self.meta_agent.get_statistics()
# Example usage
if __name__ == "__main__":
print("=== Meta-Agent Pattern Demo ===\n")
# Create meta-agent
pattern = MetaAgentPattern()
print("1. Creating specialized agents...")
result1 = pattern.create_agent(
agent_type=AgentType.SPECIALIST,
capabilities={"data_analysis", "visualization"}
)
analyst_id = result1["agent_id"]
print(f" {result1['message']}")
result2 = pattern.create_agent(
agent_type=AgentType.WORKER,
capabilities={"data_processing", "etl"}
)
worker1_id = result2["agent_id"]
print(f" {result2['message']}")
result3 = pattern.create_agent(
agent_type=AgentType.WORKER,
capabilities={"data_processing"}
)
worker2_id = result3["agent_id"]
print(f" {result3['message']}")
# List agents
print("\n2. Listing all agents...")
agents = pattern.list_agents()
print(f" Total agents: {agents['total']}")
for agent in agents['agents']:
print(f" - {agent['agent_id']}: {agent['agent_type']} ({', '.join(agent['capabilities'])})")
# Assign tasks
print("\n3. Assigning tasks...")
task1 = pattern.assign_task("Analyze sales data", "data_analysis")
print(f" {task1['message']}")
task2 = pattern.assign_task("Process customer data", "data_processing")
print(f" {task2['message']}")
task3 = pattern.assign_task("Process transaction data", "data_processing")
print(f" {task3['message']}")
# Complete tasks
print("\n4. Completing tasks...")
pattern.complete_task(task1["task_id"], result="Analysis complete", success=True)
pattern.complete_task(task2["task_id"], result="Processing complete", success=True)
pattern.complete_task(task3["task_id"], success=False) # Simulate failure
print(" Tasks completed")
# Check agent status
print("\n5. Checking agent status...")
status = pattern.get_agent_status(analyst_id)
if status['success']:
print(f" Agent: {status['agent_id']}")
print(f" Status: {status['status']}")
print(f" Tasks completed: {status['tasks_completed']}")
print(f" Tasks failed: {status['tasks_failed']}")
print(f" Success rate: {status['success_rate']:.1%}")
# Scale agents
print("\n6. Scaling data_processing agents to 5...")
scale_result = pattern.scale_agents("data_processing", 5)
print(f" {scale_result['message']}")
print(f" Agents created: {scale_result['agents_created']}")
# Statistics
print("\n7. Meta-agent statistics:")
stats = pattern.get_statistics()
print(f" Total agents created: {stats['total_agents_created']}")
print(f" Active agents: {stats['active_agents']}")
print(f" Idle/Busy/Failed: {stats['idle_agents']}/{stats['busy_agents']}/{stats['failed_agents']}")
print(f" Total tasks assigned: {stats['total_tasks_assigned']}")
print(f" Tasks completed: {stats['total_tasks_completed']}")
print(f" Tasks failed: {stats['total_tasks_failed']}")
print(f" Success rate: {stats['overall_success_rate']:.1%}")
print("\nā Comprehensive meta-agent pattern complete!")
Agentic Architecture Pattern: Meta Agent
Pattern 281: 281 Meta Agent – Line-by-Line Explanation
Overview
Pattern 281: Meta-Agent Pattern
Purpose: Agent that creates, manages, and coordinates other agents dynamically
Code Structure Analysis
File Information
- Pattern Number: 281
- Pattern Name: 281 Meta Agent
- File Path:
patterns\additional_advanced\281_meta_agent.py - Total Lines: 550
Detailed Code Explanation
Module Docstring
"""
Pattern 281: Meta-Agent Pattern
Purpose: Agent that creates, manages, and coordinates other agents dynamically
"""
Explanation: This module docstring describes the purpose and key features of the 281 Meta Agent pattern.
Imports Section
from typing import Dict, Any, List, Optional, Set, Callable
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
from collections import defaultdict # First 20 imports shown
Explanation: The module imports necessary dependencies:
– from typing import Dict, Any, List, Optional, Set, Callable: Type hints for better code documentation
– from dataclasses import dataclass, field: Data class decorators for clean data structures
– from datetime import datetime: Date and time utilities
– from enum import Enum: Enumeration support for fixed sets of values
Enumerations
AgentType (Line 14)
class AgentType(Enum):
WORKER
SPECIALIST
COORDINATOR
ANALYZER
EXECUTOR
Purpose: Type of managed agent.
Values:
– WORKER: Represents worker
– SPECIALIST: Represents specialist
– COORDINATOR: Represents coordinator
– ANALYZER: Represents analyzer
– EXECUTOR: Represents executor
AgentStatus (Line 23)
class AgentStatus(Enum):
IDLE
BUSY
FAILED
TERMINATED
Purpose: Status of managed agent.
Values:
– IDLE: Not currently active
– BUSY: Represents busy
– FAILED: Execution failed
– TERMINATED: Represents terminated
Classes
AgentType (Line 14)
Description: Type of managed agent.
AgentStatus (Line 23)
Description: Status of managed agent.
ManagedAgent (Line 32)
Description: Represents an agent managed by the meta-agent.
TaskAssignment (Line 46)
Description: Task assigned to an agent.
MetaAgent (Line 58)
Description: Implements meta-agent pattern.
Features: – Dynamic agent creation and termination – Agent capability management – Intelligent task routing – Load balancing across agents – Agent performance monitoring – Automatic agent spawning based on demand
Methods:
__init__ (Line 71)
def __init__(self):
"""No method docstring."""
Purpose: No method docstring.
Parameters:
– self: Instance reference
create_agent (Line 85)
def create_agent(self, agent_type, capabilities, metadata):
"""Create a new managed agent.
Args:
agent_type: Type of agent to create
capabilities: Set of capabilities the agent has
metadata: Additional metadata
Returns:
Agent creation status and ID"""
Purpose: Create a new managed agent.
Args: agent_type: Type of agent to create capabilities: Set of capabilities the agent has metadata: Additional metadata
Returns: Agent creation status and ID
Parameters:
– self: Instance reference
– agent_type: Parameter for agent_type
– capabilities: Parameter for capabilities
– metadata: Parameter for metadata
terminate_agent (Line 128)
def terminate_agent(self, agent_id):
"""Terminate a managed agent.
Args:
agent_id: ID of agent to terminate
Returns:
Termination status"""
Purpose: Terminate a managed agent.
Args: agent_id: ID of agent to terminate
Returns: Termination status
Parameters:
– self: Instance reference
– agent_id: Parameter for agent_id
assign_task (Line 161)
def assign_task(self, task_description, required_capability):
"""Assign task to most suitable agent.
Args:
task_description: Description of task
required_capability: Capability needed for task
Returns:
Task assignment status"""
Purpose: Assign task to most suitable agent.
Args: task_description: Description of task required_capability: Capability needed for task
Returns: Task assignment status
Parameters:
– self: Instance reference
– task_description: Parameter for task_description
– required_capability: Parameter for required_capability
complete_task (Line 230)
def complete_task(self, task_id, result, success):
"""Mark task as completed.
Args:
task_id: Task ID
result: Task result
success: Whether task succeeded
Returns:
Completion status"""
Purpose: Mark task as completed.
Args: task_id: Task ID result: Task result success: Whether task succeeded
Returns: Completion status
Parameters:
– self: Instance reference
– task_id: Parameter for task_id
– result: Parameter for result
– success: Parameter for success
scale_agents (Line 280)
def scale_agents(self, required_capability, target_count, agent_type):
"""Scale number of agents with specific capability.
Args:
required_capability: Capability to scale for
target_count: Target number of agents
agent_type: Type of agents to create
Returns:
Scaling operation status"""
Purpose: Scale number of agents with specific capability.
Args: required_capability: Capability to scale for target_count: Target number of agents agent_type: Type of agents to create
Returns: Scaling operation status
Parameters:
– self: Instance reference
– required_capability: Parameter for required_capability
– target_count: Parameter for target_count
– agent_type: Parameter for agent_type
get_agent_status (Line 345)
def get_agent_status(self, agent_id):
"""Get detailed agent status."""
Purpose: Get detailed agent status.
Parameters:
– self: Instance reference
– agent_id: Parameter for agent_id
list_agents (Line 375)
def list_agents(self, agent_type, status):
"""List agents with optional filters."""
Purpose: List agents with optional filters.
Parameters:
– self: Instance reference
– agent_type: Parameter for agent_type
– status: Parameter for status
get_statistics (Line 402)
def get_statistics(self):
"""Get meta-agent statistics."""
Purpose: Get meta-agent statistics.
Parameters:
– self: Instance reference
MetaAgentPattern (Line 425)
Description: Coordinator for meta-agent pattern.
Manages agent lifecycle and coordination.
Methods:
__init__ (Line 432)
def __init__(self):
"""No method docstring."""
Purpose: No method docstring.
Parameters:
– self: Instance reference
create_agent (Line 435)
def create_agent(self, agent_type, capabilities, metadata):
"""Create agent."""
Purpose: Create agent.
Parameters:
– self: Instance reference
– agent_type: Parameter for agent_type
– capabilities: Parameter for capabilities
– metadata: Parameter for metadata
terminate_agent (Line 439)
def terminate_agent(self, agent_id):
"""Terminate agent."""
Purpose: Terminate agent.
Parameters:
– self: Instance reference
– agent_id: Parameter for agent_id
assign_task (Line 443)
def assign_task(self, task_description, required_capability):
"""Assign task."""
Purpose: Assign task.
Parameters:
– self: Instance reference
– task_description: Parameter for task_description
– required_capability: Parameter for required_capability
complete_task (Line 447)
def complete_task(self, task_id, result, success):
"""Complete task."""
Purpose: Complete task.
Parameters:
– self: Instance reference
– task_id: Parameter for task_id
– result: Parameter for result
– success: Parameter for success
scale_agents (Line 451)
def scale_agents(self, required_capability, target_count, agent_type):
"""Scale agents."""
Purpose: Scale agents.
Parameters:
– self: Instance reference
– required_capability: Parameter for required_capability
– target_count: Parameter for target_count
– agent_type: Parameter for agent_type
get_agent_status (Line 455)
def get_agent_status(self, agent_id):
"""Get agent status."""
Purpose: Get agent status.
Parameters:
– self: Instance reference
– agent_id: Parameter for agent_id
list_agents (Line 459)
def list_agents(self):
"""List agents."""
Purpose: List agents.
Parameters:
– self: Instance reference
get_statistics (Line 463)
def get_statistics(self):
"""Get statistics."""
Purpose: Get statistics.
Parameters:
– self: Instance reference
Design Patterns Used
- Strategy Pattern: Different execution strategies for various scenarios
- State Pattern: Managing different states in the workflow
- Chain of Responsibility: Sequential processing through workflow nodes
- Observer Pattern: Tracking and monitoring pattern execution
- Factory Pattern: Creating instances with proper configuration
Usage Example
# Initialize the pattern
pattern = AgentType(name="example", model_name="gpt-4")
# Configure and execute
result = pattern.execute(data={"key": "value"})
# Check results
print(result)
Key Concepts
- LLM Integration: Uses LangChain/OpenAI for intelligent decision-making
- Workflow Orchestration: LangGraph manages execution flow through nodes
- State Management: TypedDict defines workflow state structure
- Error Handling: Comprehensive error handling and fallback mechanisms
- Extensibility: Designed for easy customization and extension
Extension Points
This pattern can be extended by: 1. Adding custom workflow nodes 2. Implementing additional validation logic 3. Integrating with external services 4. Customizing LLM prompts and responses 5. Adding monitoring and logging capabilities
Leave a Reply