import pytest from unittest.mock import Mock, patch from swarms.agents.agents import AgentNodeInitializer, AgentNode, agent # replace with actual import # For initializing AgentNodeInitializer in multiple tests @pytest.fixture def mock_agent_node_initializer(): with patch('swarms.agents.agents.ChatOpenAI') as mock_llm, \ patch('swarms.agents.agents.AutoGPT') as mock_agent: initializer = AgentNodeInitializer(model_type='openai', model_id='test', openai_api_key='test_key', temperature=0.5) initializer.llm = mock_llm initializer.tools = [Mock(spec=BaseTool)] initializer.vectorstore = Mock() initializer.agent = mock_agent return initializer # Test initialize_llm method of AgentNodeInitializer class @pytest.mark.parametrize("model_type", ['openai', 'huggingface', 'invalid']) def test_agent_node_initializer_initialize_llm(model_type, mock_agent_node_initializer): with patch('swarms.agents.agents.ChatOpenAI') as mock_openai, \ patch('swarms.agents.agents.HuggingFaceLLM') as mock_huggingface: if model_type == 'invalid': with pytest.raises(ValueError): mock_agent_node_initializer.initialize_llm(model_type, 'model_id', 'openai_api_key', 0.5) else: mock_agent_node_initializer.initialize_llm(model_type, 'model_id', 'openai_api_key', 0.5) if model_type == 'openai': mock_openai.assert_called_once() elif model_type == 'huggingface': mock_huggingface.assert_called_once() # Test add_tool method of AgentNodeInitializer class def test_agent_node_initializer_add_tool(mock_agent_node_initializer): with patch('swarms.agents.agents.BaseTool') as mock_base_tool: mock_agent_node_initializer.add_tool(mock_base_tool) assert mock_base_tool in mock_agent_node_initializer.tools # Test run method of AgentNodeInitializer class @pytest.mark.parametrize("prompt", ['valid prompt', '']) def test_agent_node_initializer_run(prompt, mock_agent_node_initializer): if prompt == '': with pytest.raises(ValueError): mock_agent_node_initializer.run(prompt) else: assert mock_agent_node_initializer.run(prompt) == "Task completed by AgentNode" # For initializing AgentNode in multiple tests @pytest.fixture def mock_agent_node(): with patch('swarms.agents.agents.ChatOpenAI') as mock_llm, \ patch('swarms.agents.agents.AgentNodeInitializer') as mock_agent_node_initializer: mock_agent_node = AgentNode('test_key') mock_agent_node.llm_class = mock_llm mock_agent_node.vectorstore = Mock() mock_agent_node_initializer.llm = mock_llm return mock_agent_node # Test initialize_llm method of AgentNode class @pytest.mark.parametrize("llm_class", ['openai', 'huggingface']) def test_agent_node_initialize_llm(llm_class, mock_agent_node): with patch('swarms.agents.agents.ChatOpenAI') as mock_openai, \ patch('swarms.agents.agents.HuggingFaceLLM') as mock_huggingface: mock_agent_node.initialize_llm(llm_class) if llm_class == 'openai': mock_openai.assert_called_once() elif llm_class == 'huggingface': mock_huggingface.assert_called_once() # Test initialize_tools method of AgentNode class def test_agent_node_initialize_tools(mock_agent_node): with patch('swarms.agents.agents.DuckDuckGoSearchRun') as mock_ddg, \ patch('swarms.agents.agents.WriteFileTool') as mock_write_file, \ patch('swarms.agents.agents.ReadFileTool') as mock_read_file, \ patch('swarms.agents.agents.process_csv') as mock_process_csv, \ patch('swarms.agents.agents.WebpageQATool') as mock_webpage_qa: mock_agent_node.initialize_tools('openai') assert mock_ddg.called assert mock_write_file.called assert mock_read_file.called assert mock_process_csv.called assert mock_webpage_qa.called # Test create_agent method of AgentNode class def test_agent_node_create_agent(mock_agent_node): with patch.object(mock_agent_node, 'initialize_llm'), \ patch.object(mock_agent_node, 'initialize_tools'), \ patch.object(mock_agent_node, 'initialize_vectorstore'), \ patch('swarms.agents.agents.AgentNodeInitializer') as mock_agent_node_initializer: mock_agent_node.create_agent() mock_agent_node_initializer.assert_called_once() mock_agent_node_initializer.return_value.create_agent.assert_called_once() # Test agent function @pytest.mark.parametrize("openai_api_key,objective", [('valid_key', 'valid_objective'), ('', 'valid_objective'), ('valid_key', '')]) def test_agent(openai_api_key, objective): if openai_api_key == '' or objective == '': with pytest.raises(ValueError): agent(openai_api_key, objective) else: with patch('swarms.agents.agents.AgentNodeInitializer') as mock_agent_node_initializer: mock_agent_node = mock_agent_node_initializer.return_value.create_agent.return_value mock_agent_node.run.return_value = 'Agent output' result = agent(openai_api_key, objective) assert result == 'Agent output'