import pytest from unittest.mock import Mock, patch from swarms.tools.agent_tools import * from swarms.boss.boss_node import BossNodeInitializer, BossNode # For initializing BossNodeInitializer in multiple tests @pytest.fixture def mock_boss_node_initializer(): llm = Mock() vectorstore = Mock() agent_executor = Mock() max_iterations = 5 boss_node_initializer = BossNodeInitializer( llm, vectorstore, agent_executor, max_iterations ) return boss_node_initializer # Test BossNodeInitializer class __init__ method def test_boss_node_initializer_init(mock_boss_node_initializer): with patch("swarms.tools.agent_tools.BabyAGI.from_llm") as mock_from_llm: assert isinstance(mock_boss_node_initializer, BossNodeInitializer) mock_from_llm.assert_called_once() # Test initialize_vectorstore method of BossNodeInitializer class def test_boss_node_initializer_initialize_vectorstore(mock_boss_node_initializer): with patch("swarms.tools.agent_tools.OpenAIEmbeddings") as mock_embeddings, patch( "swarms.tools.agent_tools.FAISS" ) as mock_faiss: result = mock_boss_node_initializer.initialize_vectorstore() mock_embeddings.assert_called_once() mock_faiss.assert_called_once() assert result is not None # Test initialize_llm method of BossNodeInitializer class def test_boss_node_initializer_initialize_llm(mock_boss_node_initializer): with patch("swarms.tools.agent_tools.OpenAI") as mock_llm: result = mock_boss_node_initializer.initialize_llm(mock_llm) mock_llm.assert_called_once() assert result is not None # Test create_task method of BossNodeInitializer class @pytest.mark.parametrize("objective", ["valid objective", ""]) def test_boss_node_initializer_create_task(objective, mock_boss_node_initializer): if objective == "": with pytest.raises(ValueError): mock_boss_node_initializer.create_task(objective) else: assert mock_boss_node_initializer.create_task(objective) == { "objective": objective } # Test run method of BossNodeInitializer class @pytest.mark.parametrize("task", ["valid task", ""]) def test_boss_node_initializer_run(task, mock_boss_node_initializer): with patch.object(mock_boss_node_initializer, "baby_agi"): if task == "": with pytest.raises(ValueError): mock_boss_node_initializer.run(task) else: try: mock_boss_node_initializer.run(task) mock_boss_node_initializer.baby_agi.assert_called_once_with(task) except Exception: pytest.fail("Unexpected Error!") # Test BossNode function @pytest.mark.parametrize( "api_key, objective, llm_class, max_iterations", [ ("valid_key", "valid_objective", OpenAI, 5), ("", "valid_objective", OpenAI, 5), ("valid_key", "", OpenAI, 5), ("valid_key", "valid_objective", "", 5), ("valid_key", "valid_objective", OpenAI, 0), ], ) def test_boss_node(api_key, objective, llm_class, max_iterations): with patch("os.getenv") as mock_getenv, patch( "swarms.tools.agent_tools.PromptTemplate.from_template" ) as mock_from_template, patch( "swarms.tools.agent_tools.LLMChain" ) as mock_llm_chain, patch( "swarms.tools.agent_tools.ZeroShotAgent.create_prompt" ) as mock_create_prompt, patch( "swarms.tools.agent_tools.ZeroShotAgent" ) as mock_zero_shot_agent, patch( "swarms.tools.agent_tools.AgentExecutor.from_agent_and_tools" ) as mock_from_agent_and_tools, patch( "swarms.tools.agent_tools.BossNodeInitializer" ) as mock_boss_node_initializer, patch.object( mock_boss_node_initializer, "create_task" ) as mock_create_task, patch.object( mock_boss_node_initializer, "run" ) as mock_run: if api_key == "" or objective == "" or llm_class == "" or max_iterations <= 0: with pytest.raises(ValueError): BossNode( objective, api_key, vectorstore=None, worker_node=None, llm_class=llm_class, max_iterations=max_iterations, verbose=False, ) else: mock_getenv.return_value = "valid_key" BossNode( objective, api_key, vectorstore=None, worker_node=None, llm_class=llm_class, max_iterations=max_iterations, verbose=False, ) mock_from_template.assert_called_once() mock_llm_chain.assert_called_once() mock_create_prompt.assert_called_once() mock_zero_shot_agent.assert_called_once() mock_from_agent_and_tools.assert_called_once() mock_boss_node_initializer.assert_called_once() mock_create_task.assert_called_once() mock_run.assert_called_once()