|
|
|
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()
|