import pytest from autogen_agentchat.agents import ( AssistantAgent, CodeExecutorAgent, SocietyOfMindAgent, ) from autogen_agentchat.teams import RoundRobinGroupChat from autogen_core.model_context import ( BufferedChatCompletionContext, ChatCompletionContext, HeadAndTailChatCompletionContext, TokenLimitedChatCompletionContext, UnboundedChatCompletionContext, ) from autogen_ext.code_executors.local import LocalCommandLineCodeExecutor from autogen_ext.models.replay import ReplayChatCompletionClient @pytest.mark.parametrize( "model_context_class", [ UnboundedChatCompletionContext(), BufferedChatCompletionContext(buffer_size=5), TokenLimitedChatCompletionContext(model_client=ReplayChatCompletionClient([]), token_limit=5), HeadAndTailChatCompletionContext(head_size=3, tail_size=2), ], ) def test_serialize_and_deserialize_model_context_on_assistant_agent(model_context_class: ChatCompletionContext) -> None: """Test the serialization and deserialization of the message context on the AssistantAgent.""" agent = AssistantAgent( name="assistant", model_client=ReplayChatCompletionClient([]), description="An assistant agent.", model_context=model_context_class, ) # Serialize the agent serialized_agent = agent.dump_component() # Deserialize the agent deserialized_agent = AssistantAgent.load_component(serialized_agent) # Check that the deserialized agent has the same model context as the original agent original_model_context = agent.model_context deserialized_model_context = deserialized_agent.model_context assert isinstance(original_model_context, type(deserialized_model_context)) assert isinstance(deserialized_model_context, type(original_model_context)) assert original_model_context.dump_component() == deserialized_model_context.dump_component() @pytest.mark.parametrize( "model_context_class", [ UnboundedChatCompletionContext(), BufferedChatCompletionContext(buffer_size=5), TokenLimitedChatCompletionContext(model_client=ReplayChatCompletionClient([]), token_limit=5), HeadAndTailChatCompletionContext(head_size=3, tail_size=2), ], ) def test_serialize_and_deserialize_model_context_on_society_of_mind_agent( model_context_class: ChatCompletionContext, ) -> None: """Test the serialization and deserialization of the message context on the AssistantAgent.""" agent1 = AssistantAgent( name="assistant1", model_client=ReplayChatCompletionClient([]), description="An assistant agent." ) agent2 = AssistantAgent( name="assistant2", model_client=ReplayChatCompletionClient([]), description="An assistant agent." ) team = RoundRobinGroupChat( participants=[agent1, agent2], ) agent = SocietyOfMindAgent( name="assistant", model_client=ReplayChatCompletionClient([]), description="An assistant agent.", team=team, model_context=model_context_class, ) # Serialize the agent serialized_agent = agent.dump_component() # Deserialize the agent deserialized_agent = SocietyOfMindAgent.load_component(serialized_agent) # Check that the deserialized agent has the same model context as the original agent original_model_context = agent.model_context deserialized_model_context = deserialized_agent.model_context assert isinstance(original_model_context, type(deserialized_model_context)) assert isinstance(deserialized_model_context, type(original_model_context)) assert original_model_context.dump_component() == deserialized_model_context.dump_component() @pytest.mark.parametrize( "model_context_class", [ UnboundedChatCompletionContext(), BufferedChatCompletionContext(buffer_size=5), TokenLimitedChatCompletionContext(model_client=ReplayChatCompletionClient([]), token_limit=5), HeadAndTailChatCompletionContext(head_size=3, tail_size=2), ], ) def test_serialize_and_deserialize_model_context_on_code_executor_agent( model_context_class: ChatCompletionContext, ) -> None: """Test the serialization and deserialization of the message context on the AssistantAgent.""" agent = CodeExecutorAgent( name="assistant", code_executor=LocalCommandLineCodeExecutor(), description="An assistant agent.", model_context=model_context_class, ) # Serialize the agent serialized_agent = agent.dump_component() # Deserialize the agent deserialized_agent = CodeExecutorAgent.load_component(serialized_agent) # Check that the deserialized agent has the same model context as the original agent original_model_context = agent.model_context deserialized_model_context = deserialized_agent.model_context assert isinstance(original_model_context, type(deserialized_model_context)) assert isinstance(deserialized_model_context, type(original_model_context)) assert original_model_context.dump_component() == deserialized_model_context.dump_component()