You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_society_of_mind_agent.py 4.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import asyncio
  2. from typing import Any, AsyncGenerator, List
  3. import pytest
  4. from autogen_agentchat.agents import AssistantAgent, SocietyOfMindAgent
  5. from autogen_agentchat.conditions import MaxMessageTermination
  6. from autogen_agentchat.teams import RoundRobinGroupChat
  7. from autogen_ext.models.openai import OpenAIChatCompletionClient
  8. from openai.resources.chat.completions import AsyncCompletions
  9. from openai.types.chat.chat_completion import ChatCompletion, Choice
  10. from openai.types.chat.chat_completion_chunk import ChatCompletionChunk
  11. from openai.types.chat.chat_completion_message import ChatCompletionMessage
  12. from openai.types.completion_usage import CompletionUsage
  13. class _MockChatCompletion:
  14. def __init__(self, chat_completions: List[ChatCompletion]) -> None:
  15. self._saved_chat_completions = chat_completions
  16. self._curr_index = 0
  17. async def mock_create(
  18. self, *args: Any, **kwargs: Any
  19. ) -> ChatCompletion | AsyncGenerator[ChatCompletionChunk, None]:
  20. await asyncio.sleep(0.1)
  21. completion = self._saved_chat_completions[self._curr_index]
  22. self._curr_index += 1
  23. return completion
  24. @pytest.mark.asyncio
  25. async def test_society_of_mind_agent(monkeypatch: pytest.MonkeyPatch) -> None:
  26. model = "gpt-4o-2024-05-13"
  27. chat_completions = [
  28. ChatCompletion(
  29. id="id2",
  30. choices=[
  31. Choice(finish_reason="stop", index=0, message=ChatCompletionMessage(content="1", role="assistant"))
  32. ],
  33. created=0,
  34. model=model,
  35. object="chat.completion",
  36. usage=CompletionUsage(prompt_tokens=10, completion_tokens=5, total_tokens=0),
  37. ),
  38. ChatCompletion(
  39. id="id2",
  40. choices=[
  41. Choice(finish_reason="stop", index=0, message=ChatCompletionMessage(content="2", role="assistant"))
  42. ],
  43. created=0,
  44. model=model,
  45. object="chat.completion",
  46. usage=CompletionUsage(prompt_tokens=10, completion_tokens=5, total_tokens=0),
  47. ),
  48. ChatCompletion(
  49. id="id2",
  50. choices=[
  51. Choice(finish_reason="stop", index=0, message=ChatCompletionMessage(content="3", role="assistant"))
  52. ],
  53. created=0,
  54. model=model,
  55. object="chat.completion",
  56. usage=CompletionUsage(prompt_tokens=10, completion_tokens=5, total_tokens=0),
  57. ),
  58. ]
  59. mock = _MockChatCompletion(chat_completions)
  60. monkeypatch.setattr(AsyncCompletions, "create", mock.mock_create)
  61. model_client = OpenAIChatCompletionClient(model="gpt-4o", api_key="")
  62. agent1 = AssistantAgent("assistant1", model_client=model_client, system_message="You are a helpful assistant.")
  63. agent2 = AssistantAgent("assistant2", model_client=model_client, system_message="You are a helpful assistant.")
  64. inner_termination = MaxMessageTermination(3)
  65. inner_team = RoundRobinGroupChat([agent1, agent2], termination_condition=inner_termination)
  66. society_of_mind_agent = SocietyOfMindAgent("society_of_mind", team=inner_team, model_client=model_client)
  67. response = await society_of_mind_agent.run(task="Count to 10.")
  68. assert len(response.messages) == 4
  69. assert response.messages[0].source == "user"
  70. assert response.messages[1].source == "assistant1"
  71. assert response.messages[2].source == "assistant2"
  72. assert response.messages[3].source == "society_of_mind"
  73. # Test save and load state.
  74. state = await society_of_mind_agent.save_state()
  75. assert state is not None
  76. agent1 = AssistantAgent("assistant1", model_client=model_client, system_message="You are a helpful assistant.")
  77. agent2 = AssistantAgent("assistant2", model_client=model_client, system_message="You are a helpful assistant.")
  78. inner_termination = MaxMessageTermination(3)
  79. inner_team = RoundRobinGroupChat([agent1, agent2], termination_condition=inner_termination)
  80. society_of_mind_agent2 = SocietyOfMindAgent("society_of_mind", team=inner_team, model_client=model_client)
  81. await society_of_mind_agent2.load_state(state)
  82. state2 = await society_of_mind_agent2.save_state()
  83. assert state == state2
  84. # Test serialization.
  85. soc_agent_config = society_of_mind_agent.dump_component()
  86. assert soc_agent_config.provider == "autogen_agentchat.agents.SocietyOfMindAgent"
  87. # Test deserialization.
  88. loaded_soc_agent = SocietyOfMindAgent.load_component(soc_agent_config)
  89. assert isinstance(loaded_soc_agent, SocietyOfMindAgent)
  90. assert loaded_soc_agent.name == "society_of_mind"