Spaces:
Sleeping
Sleeping
import unittest | |
from unittest.mock import patch | |
from swarms import create_agents_from_yaml | |
import os | |
class TestCreateAgentsFromYaml(unittest.TestCase): | |
def setUp(self): | |
# Mock the environment variable for API key | |
os.environ["OPENAI_API_KEY"] = "fake-api-key" | |
# Mock agent configuration YAML content | |
self.valid_yaml_content = """ | |
agents: | |
- agent_name: "Financial-Analysis-Agent" | |
model: | |
openai_api_key: "fake-api-key" | |
model_name: "gpt-4o-mini" | |
temperature: 0.1 | |
max_tokens: 2000 | |
system_prompt: "financial_agent_sys_prompt" | |
max_loops: 1 | |
autosave: true | |
dashboard: false | |
verbose: true | |
dynamic_temperature_enabled: true | |
saved_state_path: "finance_agent.json" | |
user_name: "swarms_corp" | |
retry_attempts: 1 | |
context_length: 200000 | |
return_step_meta: false | |
output_type: "str" | |
task: "How can I establish a ROTH IRA to buy stocks and get a tax break?" | |
- agent_name: "Stock-Analysis-Agent" | |
model: | |
openai_api_key: "fake-api-key" | |
model_name: "gpt-4o-mini" | |
temperature: 0.2 | |
max_tokens: 1500 | |
system_prompt: "stock_agent_sys_prompt" | |
max_loops: 2 | |
autosave: true | |
dashboard: false | |
verbose: true | |
dynamic_temperature_enabled: false | |
saved_state_path: "stock_agent.json" | |
user_name: "stock_user" | |
retry_attempts: 3 | |
context_length: 150000 | |
return_step_meta: true | |
output_type: "json" | |
task: "What is the best strategy for long-term stock investment?" | |
""" | |
def test_create_agents_return_agents( | |
self, mock_safe_load, mock_open | |
): | |
# Mock YAML content parsing | |
mock_safe_load.return_value = { | |
"agents": [ | |
{ | |
"agent_name": "Financial-Analysis-Agent", | |
"model": { | |
"openai_api_key": "fake-api-key", | |
"model_name": "gpt-4o-mini", | |
"temperature": 0.1, | |
"max_tokens": 2000, | |
}, | |
"system_prompt": "financial_agent_sys_prompt", | |
"max_loops": 1, | |
"autosave": True, | |
"dashboard": False, | |
"verbose": True, | |
"dynamic_temperature_enabled": True, | |
"saved_state_path": "finance_agent.json", | |
"user_name": "swarms_corp", | |
"retry_attempts": 1, | |
"context_length": 200000, | |
"return_step_meta": False, | |
"output_type": "str", | |
"task": "How can I establish a ROTH IRA to buy stocks and get a tax break?", | |
} | |
] | |
} | |
# Test if agents are returned correctly | |
agents = create_agents_from_yaml( | |
"fake_yaml_path.yaml", return_type="agents" | |
) | |
self.assertEqual(len(agents), 1) | |
self.assertEqual( | |
agents[0].agent_name, "Financial-Analysis-Agent" | |
) | |
def test_create_agents_return_tasks( | |
self, mock_agent_run, mock_safe_load, mock_open | |
): | |
# Mock YAML content parsing | |
mock_safe_load.return_value = { | |
"agents": [ | |
{ | |
"agent_name": "Financial-Analysis-Agent", | |
"model": { | |
"openai_api_key": "fake-api-key", | |
"model_name": "gpt-4o-mini", | |
"temperature": 0.1, | |
"max_tokens": 2000, | |
}, | |
"system_prompt": "financial_agent_sys_prompt", | |
"max_loops": 1, | |
"autosave": True, | |
"dashboard": False, | |
"verbose": True, | |
"dynamic_temperature_enabled": True, | |
"saved_state_path": "finance_agent.json", | |
"user_name": "swarms_corp", | |
"retry_attempts": 1, | |
"context_length": 200000, | |
"return_step_meta": False, | |
"output_type": "str", | |
"task": "How can I establish a ROTH IRA to buy stocks and get a tax break?", | |
} | |
] | |
} | |
# Test if tasks are executed and results are returned | |
task_results = create_agents_from_yaml( | |
"fake_yaml_path.yaml", return_type="tasks" | |
) | |
self.assertEqual(len(task_results), 1) | |
self.assertEqual( | |
task_results[0]["agent_name"], "Financial-Analysis-Agent" | |
) | |
self.assertIsNotNone(task_results[0]["output"]) | |
def test_create_agents_return_both( | |
self, mock_safe_load, mock_open | |
): | |
# Mock YAML content parsing | |
mock_safe_load.return_value = { | |
"agents": [ | |
{ | |
"agent_name": "Financial-Analysis-Agent", | |
"model": { | |
"openai_api_key": "fake-api-key", | |
"model_name": "gpt-4o-mini", | |
"temperature": 0.1, | |
"max_tokens": 2000, | |
}, | |
"system_prompt": "financial_agent_sys_prompt", | |
"max_loops": 1, | |
"autosave": True, | |
"dashboard": False, | |
"verbose": True, | |
"dynamic_temperature_enabled": True, | |
"saved_state_path": "finance_agent.json", | |
"user_name": "swarms_corp", | |
"retry_attempts": 1, | |
"context_length": 200000, | |
"return_step_meta": False, | |
"output_type": "str", | |
"task": "How can I establish a ROTH IRA to buy stocks and get a tax break?", | |
} | |
] | |
} | |
# Test if both agents and tasks are returned | |
agents, task_results = create_agents_from_yaml( | |
"fake_yaml_path.yaml", return_type="both" | |
) | |
self.assertEqual(len(agents), 1) | |
self.assertEqual(len(task_results), 1) | |
self.assertEqual( | |
agents[0].agent_name, "Financial-Analysis-Agent" | |
) | |
self.assertIsNotNone(task_results[0]["output"]) | |
def test_missing_agents_in_yaml(self, mock_safe_load, mock_open): | |
# Mock YAML content with missing "agents" key | |
mock_safe_load.return_value = {} | |
# Test if the function raises an error for missing "agents" key | |
with self.assertRaises(ValueError) as context: | |
create_agents_from_yaml( | |
"fake_yaml_path.yaml", return_type="agents" | |
) | |
self.assertTrue( | |
"The YAML configuration does not contain 'agents'." | |
in str(context.exception) | |
) | |
def test_invalid_return_type(self, mock_safe_load, mock_open): | |
# Mock YAML content parsing | |
mock_safe_load.return_value = { | |
"agents": [ | |
{ | |
"agent_name": "Financial-Analysis-Agent", | |
"model": { | |
"openai_api_key": "fake-api-key", | |
"model_name": "gpt-4o-mini", | |
"temperature": 0.1, | |
"max_tokens": 2000, | |
}, | |
"system_prompt": "financial_agent_sys_prompt", | |
"max_loops": 1, | |
"autosave": True, | |
"dashboard": False, | |
"verbose": True, | |
"dynamic_temperature_enabled": True, | |
"saved_state_path": "finance_agent.json", | |
"user_name": "swarms_corp", | |
"retry_attempts": 1, | |
"context_length": 200000, | |
"return_step_meta": False, | |
"output_type": "str", | |
"task": "How can I establish a ROTH IRA to buy stocks and get a tax break?", | |
} | |
] | |
} | |
# Test if an error is raised for invalid return_type | |
with self.assertRaises(ValueError) as context: | |
create_agents_from_yaml( | |
"fake_yaml_path.yaml", return_type="invalid_type" | |
) | |
self.assertTrue( | |
"Invalid return_type" in str(context.exception) | |
) | |
if __name__ == "__main__": | |
unittest.main() | |