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.
227 lines
6.8 KiB
227 lines
6.8 KiB
import os
|
|
import asyncio
|
|
from loguru import logger
|
|
from swarms.structs.agent import Agent
|
|
from swarms.structs.spreadsheet_swarm import SpreadSheetSwarm
|
|
|
|
|
|
def create_test_csv() -> str:
|
|
"""Create a test CSV file with agent configurations."""
|
|
print("\nStarting creation of test CSV file")
|
|
try:
|
|
csv_content = """agent_name,description,system_prompt,task
|
|
test_agent_1,Test Agent 1,System prompt 1,Task 1
|
|
test_agent_2,Test Agent 2,System prompt 2,Task 2"""
|
|
|
|
file_path = "test_agents.csv"
|
|
with open(file_path, "w") as f:
|
|
f.write(csv_content)
|
|
|
|
print(f"Created CSV with content:\n{csv_content}")
|
|
print(f"CSV file created at: {file_path}")
|
|
return file_path
|
|
except Exception as e:
|
|
logger.error(f"Failed to create test CSV: {str(e)}")
|
|
raise
|
|
|
|
|
|
def create_test_agent(name: str) -> Agent:
|
|
"""Create a test agent with specified name."""
|
|
print(f"\nCreating test agent: {name}")
|
|
try:
|
|
agent = Agent(
|
|
agent_name=name,
|
|
system_prompt=f"Test prompt for {name}",
|
|
model_name="gpt-4o-mini",
|
|
max_loops=1,
|
|
autosave=True,
|
|
verbose=True,
|
|
)
|
|
print(f"Created agent: {name}")
|
|
return agent
|
|
except Exception as e:
|
|
logger.error(f"Failed to create agent {name}: {str(e)}")
|
|
raise
|
|
|
|
|
|
def test_swarm_initialization() -> None:
|
|
"""Test basic swarm initialization."""
|
|
print("\n[TEST] Starting swarm initialization test")
|
|
try:
|
|
print("Creating test agents...")
|
|
agents = [
|
|
create_test_agent("agent1"),
|
|
create_test_agent("agent2"),
|
|
]
|
|
|
|
print("Initializing swarm...")
|
|
swarm = SpreadSheetSwarm(
|
|
name="Test Swarm",
|
|
description="Test Description",
|
|
agents=agents,
|
|
max_loops=2,
|
|
)
|
|
|
|
print("Verifying swarm configuration...")
|
|
assert swarm.name == "Test Swarm"
|
|
assert swarm.description == "Test Description"
|
|
assert len(swarm.agents) == 2
|
|
assert swarm.max_loops == 2
|
|
|
|
print("✅ Swarm initialization test PASSED")
|
|
except Exception as e:
|
|
logger.error(f"❌ Swarm initialization test FAILED: {str(e)}")
|
|
raise
|
|
|
|
|
|
async def test_load_from_csv() -> None:
|
|
"""Test loading agent configurations from CSV."""
|
|
print("\n[TEST] Starting CSV loading test")
|
|
try:
|
|
csv_path = create_test_csv()
|
|
print("Initializing swarm with CSV...")
|
|
swarm = SpreadSheetSwarm(load_path=csv_path)
|
|
|
|
print("Loading configurations...")
|
|
await swarm._load_from_csv()
|
|
|
|
print("Verifying loaded configurations...")
|
|
assert len(swarm.agents) == 2
|
|
assert len(swarm.agent_configs) == 2
|
|
assert "test_agent_1" in swarm.agent_configs
|
|
assert "test_agent_2" in swarm.agent_configs
|
|
|
|
os.remove(csv_path)
|
|
print(f"Cleaned up test file: {csv_path}")
|
|
|
|
print("✅ CSV loading test PASSED")
|
|
except Exception as e:
|
|
logger.error(f"❌ CSV loading test FAILED: {str(e)}")
|
|
raise
|
|
|
|
|
|
async def test_run_tasks() -> None:
|
|
"""Test running tasks with multiple agents."""
|
|
print("\n[TEST] Starting task execution test")
|
|
try:
|
|
print("Setting up test swarm...")
|
|
agents = [
|
|
create_test_agent("agent1"),
|
|
create_test_agent("agent2"),
|
|
]
|
|
swarm = SpreadSheetSwarm(agents=agents, max_loops=1)
|
|
|
|
test_task = "Test task for all agents"
|
|
print(f"Running test task: {test_task}")
|
|
await swarm._run_tasks(test_task)
|
|
|
|
print("Verifying task execution...")
|
|
assert swarm.metadata.tasks_completed == 2
|
|
assert len(swarm.metadata.outputs) == 2
|
|
|
|
print("✅ Task execution test PASSED")
|
|
except Exception as e:
|
|
logger.error(f"❌ Task execution test FAILED: {str(e)}")
|
|
raise
|
|
|
|
|
|
def test_output_tracking() -> None:
|
|
"""Test tracking of task outputs."""
|
|
print("\n[TEST] Starting output tracking test")
|
|
try:
|
|
print("Creating test swarm...")
|
|
swarm = SpreadSheetSwarm(agents=[create_test_agent("agent1")])
|
|
|
|
print("Tracking test output...")
|
|
swarm._track_output("agent1", "Test task", "Test result")
|
|
|
|
print("Verifying output tracking...")
|
|
assert swarm.metadata.tasks_completed == 1
|
|
assert len(swarm.metadata.outputs) == 1
|
|
assert swarm.metadata.outputs[0].agent_name == "agent1"
|
|
|
|
print("✅ Output tracking test PASSED")
|
|
except Exception as e:
|
|
logger.error(f"❌ Output tracking test FAILED: {str(e)}")
|
|
raise
|
|
|
|
|
|
async def test_save_to_csv() -> None:
|
|
"""Test saving metadata to CSV."""
|
|
print("\n[TEST] Starting CSV saving test")
|
|
try:
|
|
print("Setting up test data...")
|
|
swarm = SpreadSheetSwarm(
|
|
agents=[create_test_agent("agent1")],
|
|
save_file_path="test_output.csv",
|
|
)
|
|
swarm._track_output("agent1", "Test task", "Test result")
|
|
|
|
print("Saving to CSV...")
|
|
await swarm._save_to_csv()
|
|
|
|
print("Verifying file creation...")
|
|
assert os.path.exists(swarm.save_file_path)
|
|
|
|
os.remove(swarm.save_file_path)
|
|
print("Cleaned up test file")
|
|
|
|
print("✅ CSV saving test PASSED")
|
|
except Exception as e:
|
|
logger.error(f"❌ CSV saving test FAILED: {str(e)}")
|
|
raise
|
|
|
|
|
|
def test_json_export() -> None:
|
|
"""Test JSON export functionality."""
|
|
print("\n[TEST] Starting JSON export test")
|
|
try:
|
|
print("Creating test data...")
|
|
swarm = SpreadSheetSwarm(agents=[create_test_agent("agent1")])
|
|
swarm._track_output("agent1", "Test task", "Test result")
|
|
|
|
print("Exporting to JSON...")
|
|
json_output = swarm.export_to_json()
|
|
|
|
print("Verifying JSON output...")
|
|
assert isinstance(json_output, str)
|
|
assert "run_id" in json_output
|
|
assert "tasks_completed" in json_output
|
|
|
|
print("✅ JSON export test PASSED")
|
|
except Exception as e:
|
|
logger.error(f"❌ JSON export test FAILED: {str(e)}")
|
|
raise
|
|
|
|
|
|
async def run_all_tests() -> None:
|
|
"""Run all test functions."""
|
|
print("\n" + "=" * 50)
|
|
print("Starting SpreadsheetSwarm Test Suite")
|
|
print("=" * 50 + "\n")
|
|
|
|
try:
|
|
# Run synchronous tests
|
|
print("Running synchronous tests...")
|
|
test_swarm_initialization()
|
|
test_output_tracking()
|
|
test_json_export()
|
|
|
|
# Run asynchronous tests
|
|
print("\nRunning asynchronous tests...")
|
|
await test_load_from_csv()
|
|
await test_run_tasks()
|
|
await test_save_to_csv()
|
|
|
|
print("\n🎉 All tests completed successfully!")
|
|
print("=" * 50)
|
|
except Exception as e:
|
|
logger.error(f"\n❌ Test suite failed: {str(e)}")
|
|
print("=" * 50)
|
|
raise
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Run all tests
|
|
asyncio.run(run_all_tests())
|