Spaces:
Runtime error
Runtime error
import datetime | |
from datetime import timedelta | |
from unittest.mock import Mock | |
import pytest | |
from dotenv import load_dotenv | |
from swarm_models.gpt4_vision_api import GPT4VisionAPI | |
from swarms.prompts.multi_modal_autonomous_instruction_prompt import ( | |
MULTI_MODAL_AUTO_AGENT_SYSTEM_PROMPT_1, | |
) | |
from swarms.structs.agent import Agent | |
from swarms.structs.task import Task | |
load_dotenv() | |
def llm(): | |
return GPT4VisionAPI() | |
def test_agent_run_task(llm): | |
task = ( | |
"Analyze this image of an assembly line and identify any" | |
" issues such as misaligned parts, defects, or deviations" | |
" from the standard assembly process. IF there is anything" | |
" unsafe in the image, explain why it is unsafe and how it" | |
" could be improved." | |
) | |
img = "assembly_line.jpg" | |
agent = Agent( | |
llm=llm, | |
max_loops="auto", | |
sop=MULTI_MODAL_AUTO_AGENT_SYSTEM_PROMPT_1, | |
dashboard=True, | |
) | |
result = agent.run(task=task, img=img) | |
# Add assertions here to verify the expected behavior of the agent's run method | |
assert isinstance(result, dict) | |
assert "response" in result | |
assert "dashboard_data" in result | |
# Add more assertions as needed | |
def task(): | |
agents = [Agent(llm=llm, id=f"Agent_{i}") for i in range(5)] | |
return Task( | |
id="Task_1", task="Task_Name", agents=agents, dependencies=[] | |
) | |
# Basic tests | |
def test_task_init(task): | |
assert task.id == "Task_1" | |
assert task.task == "Task_Name" | |
assert isinstance(task.agents, list) | |
assert len(task.agents) == 5 | |
assert isinstance(task.dependencies, list) | |
def test_task_execute(task, mocker): | |
mocker.patch.object(Agent, "run", side_effect=[1, 2, 3, 4, 5]) | |
parent_results = {} | |
task.execute(parent_results) | |
assert isinstance(task.results, list) | |
assert len(task.results) == 5 | |
for result in task.results: | |
assert isinstance(result, int) | |
# Parameterized tests | |
def test_task_num_agents(task, num_agents, mocker): | |
task.agents = [Agent(id=f"Agent_{i}") for i in range(num_agents)] | |
mocker.patch.object(Agent, "run", return_value=1) | |
parent_results = {} | |
task.execute(parent_results) | |
assert len(task.results) == num_agents | |
# Exception testing | |
def test_task_execute_with_dependency_error(task, mocker): | |
task.dependencies = ["NonExistentTask"] | |
mocker.patch.object(Agent, "run", return_value=1) | |
parent_results = {} | |
with pytest.raises(KeyError): | |
task.execute(parent_results) | |
# Mocking and monkeypatching tests | |
def test_task_execute_with_mocked_agents(task, mocker): | |
mock_agents = [Mock(spec=Agent) for _ in range(5)] | |
mocker.patch.object(task, "agents", mock_agents) | |
for mock_agent in mock_agents: | |
mock_agent.run.return_value = 1 | |
parent_results = {} | |
task.execute(parent_results) | |
assert len(task.results) == 5 | |
def test_task_creation(): | |
agent = Agent() | |
task = Task(id="1", task="Task1", result=None, agents=[agent]) | |
assert task.id == "1" | |
assert task.task == "Task1" | |
assert task.result is None | |
assert task.agents == [agent] | |
def test_task_with_dependencies(): | |
agent = Agent() | |
task = Task( | |
id="2", | |
task="Task2", | |
result=None, | |
agents=[agent], | |
dependencies=["Task1"], | |
) | |
assert task.dependencies == ["Task1"] | |
def test_task_with_args(): | |
agent = Agent() | |
task = Task( | |
id="3", | |
task="Task3", | |
result=None, | |
agents=[agent], | |
args=["arg1", "arg2"], | |
) | |
assert task.args == ["arg1", "arg2"] | |
def test_task_with_kwargs(): | |
agent = Agent() | |
task = Task( | |
id="4", | |
task="Task4", | |
result=None, | |
agents=[agent], | |
kwargs={"kwarg1": "value1"}, | |
) | |
assert task.kwargs == {"kwarg1": "value1"} | |
# ... continue creating tests for different scenarios | |
# Test execute method | |
def test_execute(): | |
agent = Agent() | |
task = Task(id="5", task="Task5", result=None, agents=[agent]) | |
# Assuming execute method returns True on successful execution | |
assert task.run() is True | |
def test_task_execute_with_agent(mocker): | |
mock_agent = mocker.Mock(spec=Agent) | |
mock_agent.run.return_value = "result" | |
task = Task(description="Test task", agent=mock_agent) | |
task.run() | |
assert task.result == "result" | |
assert task.history == ["result"] | |
def test_task_execute_with_callable(mocker): | |
mock_callable = mocker.Mock() | |
mock_callable.run.return_value = "result" | |
task = Task(description="Test task", agent=mock_callable) | |
task.run() | |
assert task.result == "result" | |
assert task.history == ["result"] | |
def test_task_execute_with_condition(mocker): | |
mock_agent = mocker.Mock(spec=Agent) | |
mock_agent.run.return_value = "result" | |
condition = mocker.Mock(return_value=True) | |
task = Task( | |
description="Test task", agent=mock_agent, condition=condition | |
) | |
task.run() | |
assert task.result == "result" | |
assert task.history == ["result"] | |
def test_task_execute_with_condition_false(mocker): | |
mock_agent = mocker.Mock(spec=Agent) | |
mock_agent.run.return_value = "result" | |
condition = mocker.Mock(return_value=False) | |
task = Task( | |
description="Test task", agent=mock_agent, condition=condition | |
) | |
task.run() | |
assert task.result is None | |
assert task.history == [] | |
def test_task_execute_with_action(mocker): | |
mock_agent = mocker.Mock(spec=Agent) | |
mock_agent.run.return_value = "result" | |
action = mocker.Mock() | |
task = Task( | |
description="Test task", agent=mock_agent, action=action | |
) | |
task.run() | |
assert task.result == "result" | |
assert task.history == ["result"] | |
action.assert_called_once() | |
def test_task_handle_scheduled_task_now(mocker): | |
mock_agent = mocker.Mock(spec=Agent) | |
mock_agent.run.return_value = "result" | |
task = Task( | |
description="Test task", | |
agent=mock_agent, | |
schedule_time=datetime.now(), | |
) | |
task.handle_scheduled_task() | |
assert task.result == "result" | |
assert task.history == ["result"] | |
def test_task_handle_scheduled_task_future(mocker): | |
mock_agent = mocker.Mock(spec=Agent) | |
mock_agent.run.return_value = "result" | |
task = Task( | |
description="Test task", | |
agent=mock_agent, | |
schedule_time=datetime.now() + timedelta(days=1), | |
) | |
with mocker.patch.object( | |
task.scheduler, "enter" | |
) as mock_enter, mocker.patch.object( | |
task.scheduler, "run" | |
) as mock_run: | |
task.handle_scheduled_task() | |
mock_enter.assert_called_once() | |
mock_run.assert_called_once() | |
def test_task_set_trigger(): | |
task = Task(description="Test task", agent=Agent()) | |
def trigger(): | |
return True | |
task.set_trigger(trigger) | |
assert task.trigger == trigger | |
def test_task_set_action(): | |
task = Task(description="Test task", agent=Agent()) | |
def action(): | |
return True | |
task.set_action(action) | |
assert task.action == action | |
def test_task_set_condition(): | |
task = Task(description="Test task", agent=Agent()) | |
def condition(): | |
return True | |
task.set_condition(condition) | |
assert task.condition == condition | |