|
- import pytest
- from autogen_agentchat.agents import AssistantAgent
- from autogen_agentchat.conditions import MaxMessageTermination
- from autogen_agentchat.teams import RoundRobinGroupChat
- from autogen_agentchat.tools import AgentTool, TeamTool
- from autogen_core import (
- CancellationToken,
- )
- from autogen_ext.models.replay import ReplayChatCompletionClient
- from test_group_chat import _EchoAgent # type: ignore[reportPrivateUsage]
-
-
- @pytest.mark.asyncio
- async def test_agent_tool_run() -> None:
- """Test running a task with AgentTool."""
- mock_chat_agent = _EchoAgent("Mock_Agent", "A mock agent for testing")
- tool = AgentTool(agent=mock_chat_agent)
- task_result = await tool.run_json({"task": "Test task"}, cancellation_token=CancellationToken())
- assert task_result.messages[1].content == "Test task"
-
-
- @pytest.mark.asyncio
- async def test_agent_tool_state() -> None:
- """Test saving state of AgentTool."""
- mock_chat_agent = _EchoAgent("Mock_Agent", "A mock agent for testing")
- tool = AgentTool(agent=mock_chat_agent)
- state = await tool.save_state_json()
- assert state == {"last_message": None, "total_messages": 0}
-
- await tool.run_json({"task": "Test task"}, cancellation_token=CancellationToken())
- state = await tool.save_state_json()
- assert state == {"last_message": "Test task", "total_messages": 1}
-
- mock_chat_agent_2 = _EchoAgent("Mock_Agent_2", "A mock agent for testing")
- tool_2 = AgentTool(agent=mock_chat_agent_2)
- await tool_2.load_state_json(state)
- state2 = await tool_2.save_state_json()
- assert state2 == {"last_message": "Test task", "total_messages": 1}
-
-
- def test_agent_tool_component() -> None:
- """Test serialization of AgentTool to config."""
- model_client = ReplayChatCompletionClient(["test"])
- agent = AssistantAgent(name="assistant", model_client=model_client)
- tool = AgentTool(agent=agent)
- config = tool.dump_component()
- assert config.provider == "autogen_agentchat.tools.AgentTool"
-
- tool2 = AgentTool.load_component(config)
- assert isinstance(tool2, AgentTool)
- assert tool2.name == agent.name
- assert tool2.description == agent.description
-
-
- @pytest.mark.asyncio
- async def test_team_tool() -> None:
- """Test running a task with TeamTool."""
- agent1 = _EchoAgent("Agent1", "An agent for testing")
- agent2 = _EchoAgent("Agent2", "Another agent for testing")
- termination = MaxMessageTermination(max_messages=3)
- team = RoundRobinGroupChat(
- [agent1, agent2],
- termination_condition=termination,
- )
- tool = TeamTool(team=team, name="Team Tool", description="A team tool for testing")
- task_result = await tool.run_json(args={"task": "test task"}, cancellation_token=CancellationToken())
- assert task_result.messages[1].content == "test task"
- assert task_result.messages[2].content == "test task"
-
- # Validate state.
- state = await tool.save_state_json()
- # Reload the state and check if it matches.
- agent2 = _EchoAgent("Agent1", "Another agent for testing")
- agent3 = _EchoAgent("Agent2", "Another agent for testing")
- team2 = RoundRobinGroupChat(
- [agent2, agent3],
- termination_condition=termination,
- )
- tool2 = TeamTool(team=team2, name="Team Tool", description="A team tool for testing")
- await tool2.load_state_json(state)
- state2 = await tool2.save_state_json()
- assert state == state2
-
-
- @pytest.mark.asyncio
- async def test_team_tool_component() -> None:
- """Test serialization of TeamTool to config."""
- model_client = ReplayChatCompletionClient(["test"])
- agent1 = AssistantAgent(name="assistant1", model_client=model_client)
- agent2 = AssistantAgent(name="assistant2", model_client=model_client)
- team = RoundRobinGroupChat([agent1, agent2])
- tool = TeamTool(team=team, name="Team Tool", description="A team tool for testing")
- config = tool.dump_component()
- assert config.provider == "autogen_agentchat.tools.TeamTool"
-
- tool2 = TeamTool.load_component(config)
- assert isinstance(tool2, TeamTool)
- assert tool2.name == "Team Tool"
- assert tool2.description == "A team tool for testing"
- assert isinstance(tool2._team, RoundRobinGroupChat) # type: ignore[reportPrivateUsage]
|