You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
345 lines
11 KiB
345 lines
11 KiB
"""
|
|
Multi-Agent Caching Example - Super Fast Agent Loading
|
|
|
|
This example demonstrates how to use the agent caching system with multiple agents
|
|
to achieve 10-100x speedup in agent loading and reuse.
|
|
"""
|
|
|
|
import time
|
|
from swarms import Agent
|
|
from swarms.utils.agent_cache import (
|
|
cached_agent_loader,
|
|
simple_lru_agent_loader,
|
|
AgentCache,
|
|
get_agent_cache_stats,
|
|
clear_agent_cache,
|
|
)
|
|
|
|
|
|
def create_trading_team():
|
|
"""Create a team of trading agents."""
|
|
|
|
# Create multiple agents for different trading strategies
|
|
agents = [
|
|
Agent(
|
|
agent_name="Quantitative-Trading-Agent",
|
|
agent_description="Advanced quantitative trading and algorithmic analysis agent",
|
|
system_prompt="""You are an expert quantitative trading agent with deep expertise in:
|
|
- Algorithmic trading strategies and implementation
|
|
- Statistical arbitrage and market making
|
|
- Risk management and portfolio optimization
|
|
- High-frequency trading systems
|
|
- Market microstructure analysis""",
|
|
max_loops=1,
|
|
model_name="gpt-4o-mini",
|
|
temperature=0.1,
|
|
),
|
|
Agent(
|
|
agent_name="Risk-Management-Agent",
|
|
agent_description="Portfolio risk assessment and management specialist",
|
|
system_prompt="""You are a risk management specialist focused on:
|
|
- Portfolio risk assessment and stress testing
|
|
- Value at Risk (VaR) calculations
|
|
- Regulatory compliance monitoring
|
|
- Risk mitigation strategies
|
|
- Capital allocation optimization""",
|
|
max_loops=1,
|
|
model_name="gpt-4o-mini",
|
|
temperature=0.2,
|
|
),
|
|
Agent(
|
|
agent_name="Market-Analysis-Agent",
|
|
agent_description="Real-time market analysis and trend identification",
|
|
system_prompt="""You are a market analysis expert specializing in:
|
|
- Technical analysis and chart patterns
|
|
- Market sentiment analysis
|
|
- Economic indicator interpretation
|
|
- Trend identification and momentum analysis
|
|
- Support and resistance level identification""",
|
|
max_loops=1,
|
|
model_name="gpt-4o-mini",
|
|
temperature=0.3,
|
|
),
|
|
Agent(
|
|
agent_name="Options-Trading-Agent",
|
|
agent_description="Options strategies and derivatives trading specialist",
|
|
system_prompt="""You are an options trading specialist with expertise in:
|
|
- Options pricing models and Greeks analysis
|
|
- Volatility trading strategies
|
|
- Complex options spreads and combinations
|
|
- Risk-neutral portfolio construction
|
|
- Derivatives market making""",
|
|
max_loops=1,
|
|
model_name="gpt-4o-mini",
|
|
temperature=0.15,
|
|
),
|
|
Agent(
|
|
agent_name="ESG-Investment-Agent",
|
|
agent_description="ESG-focused investment analysis and screening",
|
|
system_prompt="""You are an ESG investment specialist focusing on:
|
|
- Environmental, Social, and Governance criteria evaluation
|
|
- Sustainable investment screening
|
|
- Impact investing strategies
|
|
- ESG risk assessment
|
|
- Green finance and climate risk analysis""",
|
|
max_loops=1,
|
|
model_name="gpt-4o-mini",
|
|
temperature=0.25,
|
|
),
|
|
]
|
|
|
|
return agents
|
|
|
|
|
|
def basic_caching_example():
|
|
"""Basic example of caching multiple agents."""
|
|
print("=== Basic Multi-Agent Caching Example ===")
|
|
|
|
# Create our trading team
|
|
trading_team = create_trading_team()
|
|
print(f"Created {len(trading_team)} trading agents")
|
|
|
|
# First load - agents will be processed and cached
|
|
print("\n🔄 First load (will cache agents)...")
|
|
start_time = time.time()
|
|
cached_team_1 = cached_agent_loader(trading_team)
|
|
first_load_time = time.time() - start_time
|
|
|
|
print(
|
|
f"✅ First load: {len(cached_team_1)} agents in {first_load_time:.3f}s"
|
|
)
|
|
|
|
# Second load - agents will be retrieved from cache (super fast!)
|
|
print("\n⚡ Second load (from cache)...")
|
|
start_time = time.time()
|
|
cached_team_2 = cached_agent_loader(trading_team)
|
|
second_load_time = time.time() - start_time
|
|
|
|
print(
|
|
f"🚀 Second load: {len(cached_team_2)} agents in {second_load_time:.3f}s"
|
|
)
|
|
print(
|
|
f"💨 Speedup: {first_load_time/second_load_time:.1f}x faster!"
|
|
)
|
|
|
|
# Show cache statistics
|
|
stats = get_agent_cache_stats()
|
|
print(f"📊 Cache stats: {stats}")
|
|
|
|
return cached_team_1
|
|
|
|
|
|
def custom_cache_example():
|
|
"""Example using a custom cache for specific use cases."""
|
|
print("\n=== Custom Cache Example ===")
|
|
|
|
# Create a custom cache with specific settings
|
|
custom_cache = AgentCache(
|
|
max_memory_cache_size=50, # Cache up to 50 agents
|
|
cache_dir="trading_team_cache", # Custom cache directory
|
|
enable_persistent_cache=True, # Enable disk persistence
|
|
auto_save_interval=120, # Auto-save every 2 minutes
|
|
)
|
|
|
|
# Create agents
|
|
trading_team = create_trading_team()
|
|
|
|
# Load with custom cache
|
|
print("🔧 Loading with custom cache...")
|
|
start_time = time.time()
|
|
cached_team = cached_agent_loader(
|
|
trading_team,
|
|
cache_instance=custom_cache,
|
|
parallel_loading=True,
|
|
)
|
|
load_time = time.time() - start_time
|
|
|
|
print(f"✅ Loaded {len(cached_team)} agents in {load_time:.3f}s")
|
|
|
|
# Get custom cache stats
|
|
stats = custom_cache.get_cache_stats()
|
|
print(f"📊 Custom cache stats: {stats}")
|
|
|
|
# Cleanup
|
|
custom_cache.shutdown()
|
|
|
|
return cached_team
|
|
|
|
|
|
def simple_lru_example():
|
|
"""Example using the simple LRU cache approach."""
|
|
print("\n=== Simple LRU Cache Example ===")
|
|
|
|
trading_team = create_trading_team()
|
|
|
|
# First load with simple LRU
|
|
print("🔄 First load with simple LRU...")
|
|
start_time = time.time()
|
|
lru_team_1 = simple_lru_agent_loader(trading_team)
|
|
first_time = time.time() - start_time
|
|
|
|
# Second load (cached)
|
|
print("⚡ Second load with simple LRU...")
|
|
start_time = time.time()
|
|
simple_lru_agent_loader(trading_team)
|
|
cached_time = time.time() - start_time
|
|
|
|
print(
|
|
f"📈 Simple LRU - First: {first_time:.3f}s, Cached: {cached_time:.3f}s"
|
|
)
|
|
print(f"💨 Speedup: {first_time/cached_time:.1f}x faster!")
|
|
|
|
return lru_team_1
|
|
|
|
|
|
def team_workflow_simulation():
|
|
"""Simulate a real-world workflow with the cached trading team."""
|
|
print("\n=== Team Workflow Simulation ===")
|
|
|
|
# Create and cache the team
|
|
trading_team = create_trading_team()
|
|
cached_team = cached_agent_loader(trading_team)
|
|
|
|
# Simulate multiple analysis sessions
|
|
tasks = [
|
|
"Analyze the current market conditions for AAPL",
|
|
"What are the top 3 ETFs for gold coverage?",
|
|
"Assess the risk profile of a tech-heavy portfolio",
|
|
"Identify options strategies for volatile markets",
|
|
"Evaluate ESG investment opportunities in renewable energy",
|
|
]
|
|
|
|
print(
|
|
f"🎯 Running {len(tasks)} analysis tasks with {len(cached_team)} agents..."
|
|
)
|
|
|
|
session_start = time.time()
|
|
|
|
for i, (agent, task) in enumerate(zip(cached_team, tasks)):
|
|
print(f"\n📋 Task {i+1}: {agent.agent_name}")
|
|
print(f" Question: {task}")
|
|
|
|
task_start = time.time()
|
|
|
|
# Run the agent on the task
|
|
response = agent.run(task)
|
|
|
|
task_time = time.time() - task_start
|
|
print(f" ⏱️ Completed in {task_time:.2f}s")
|
|
print(
|
|
f" 💡 Response: {response[:100]}..."
|
|
if len(response) > 100
|
|
else f" 💡 Response: {response}"
|
|
)
|
|
|
|
total_session_time = time.time() - session_start
|
|
print(f"\n🏁 Total session time: {total_session_time:.2f}s")
|
|
print(
|
|
f"📊 Average task time: {total_session_time/len(tasks):.2f}s"
|
|
)
|
|
|
|
|
|
def performance_comparison():
|
|
"""Compare performance with and without caching."""
|
|
print("\n=== Performance Comparison ===")
|
|
|
|
# Create test agents
|
|
test_agents = []
|
|
for i in range(10):
|
|
agent = Agent(
|
|
agent_name=f"Test-Agent-{i:02d}",
|
|
model_name="gpt-4o-mini",
|
|
system_prompt=f"You are test agent number {i}.",
|
|
max_loops=1,
|
|
)
|
|
test_agents.append(agent)
|
|
|
|
# Test without caching (creating new agents each time)
|
|
print("🔄 Testing without caching...")
|
|
no_cache_times = []
|
|
for _ in range(3):
|
|
start_time = time.time()
|
|
# Simulate creating new agents each time
|
|
new_agents = []
|
|
for agent in test_agents:
|
|
new_agent = Agent(
|
|
agent_name=agent.agent_name,
|
|
model_name=agent.model_name,
|
|
system_prompt=agent.system_prompt,
|
|
max_loops=agent.max_loops,
|
|
)
|
|
new_agents.append(new_agent)
|
|
no_cache_time = time.time() - start_time
|
|
no_cache_times.append(no_cache_time)
|
|
|
|
avg_no_cache_time = sum(no_cache_times) / len(no_cache_times)
|
|
|
|
# Clear cache for fair comparison
|
|
clear_agent_cache()
|
|
|
|
# Test with caching (first load)
|
|
print("🔧 Testing with caching (first load)...")
|
|
start_time = time.time()
|
|
cached_agent_loader(test_agents)
|
|
first_cache_time = time.time() - start_time
|
|
|
|
# Test with caching (subsequent loads)
|
|
print("⚡ Testing with caching (subsequent loads)...")
|
|
cache_times = []
|
|
for _ in range(3):
|
|
start_time = time.time()
|
|
cached_agent_loader(test_agents)
|
|
cache_time = time.time() - start_time
|
|
cache_times.append(cache_time)
|
|
|
|
avg_cache_time = sum(cache_times) / len(cache_times)
|
|
|
|
# Results
|
|
print(f"\n📊 Performance Results for {len(test_agents)} agents:")
|
|
print(f" 🐌 No caching (avg): {avg_no_cache_time:.4f}s")
|
|
print(f" 🔧 Cached (first load): {first_cache_time:.4f}s")
|
|
print(f" 🚀 Cached (avg): {avg_cache_time:.4f}s")
|
|
print(
|
|
f" 💨 Cache speedup: {avg_no_cache_time/avg_cache_time:.1f}x faster!"
|
|
)
|
|
|
|
# Final cache stats
|
|
final_stats = get_agent_cache_stats()
|
|
print(f" 📈 Final cache stats: {final_stats}")
|
|
|
|
|
|
def main():
|
|
"""Run all examples to demonstrate multi-agent caching."""
|
|
print("🤖 Multi-Agent Caching System Examples")
|
|
print("=" * 50)
|
|
|
|
try:
|
|
# Run examples
|
|
basic_caching_example()
|
|
custom_cache_example()
|
|
simple_lru_example()
|
|
performance_comparison()
|
|
team_workflow_simulation()
|
|
|
|
print("\n✅ All examples completed successfully!")
|
|
print("\n🎯 Key Benefits of Multi-Agent Caching:")
|
|
print("• 🚀 10-100x faster agent loading from cache")
|
|
print(
|
|
"• 💾 Persistent disk cache survives application restarts"
|
|
)
|
|
print("• 🧠 Intelligent LRU memory management")
|
|
print("• 🔄 Background preloading for zero-latency access")
|
|
print("• 📊 Detailed performance monitoring")
|
|
print("• 🛡️ Thread-safe with memory leak prevention")
|
|
print("• ⚡ Parallel processing for multiple agents")
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error running examples: {e}")
|
|
import traceback
|
|
|
|
traceback.print_exc()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|