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.
swarms/tests/agents/test_create_agents_from_yam...

217 lines
8.9 KiB

3 months ago
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?"
"""
@patch('builtins.open', new_callable=unittest.mock.mock_open, read_data="")
@patch('yaml.safe_load')
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")
@patch('builtins.open', new_callable=unittest.mock.mock_open, read_data="")
@patch('yaml.safe_load')
@patch('swarms.Agent.run', return_value="Task completed successfully")
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'])
@patch('builtins.open', new_callable=unittest.mock.mock_open, read_data="")
@patch('yaml.safe_load')
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'])
@patch('builtins.open', new_callable=unittest.mock.mock_open, read_data="")
@patch('yaml.safe_load')
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))
@patch('builtins.open', new_callable=unittest.mock.mock_open, read_data="")
@patch('yaml.safe_load')
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()