| 
									
										
										
										
											2024-09-28 10:40:33 -07:00
										 |  |  | import asyncio | 
					
						
							|  |  |  | import random | 
					
						
							|  |  |  | from dataclasses import dataclass | 
					
						
							|  |  |  | from typing import List | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import pytest | 
					
						
							| 
									
										
										
										
											2024-10-09 14:46:43 -04:00
										 |  |  | from autogen_agentchat.teams._group_chat._sequential_routed_agent import SequentialRoutedAgent | 
					
						
							| 
									
										
										
										
											2024-12-04 16:23:20 -08:00
										 |  |  | from autogen_core import ( | 
					
						
							|  |  |  |     AgentId, | 
					
						
							|  |  |  |     DefaultTopicId, | 
					
						
							|  |  |  |     MessageContext, | 
					
						
							|  |  |  |     SingleThreadedAgentRuntime, | 
					
						
							|  |  |  |     default_subscription, | 
					
						
							|  |  |  |     message_handler, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-09-28 10:40:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @dataclass | 
					
						
							|  |  |  | class Message: | 
					
						
							|  |  |  |     content: str | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @default_subscription | 
					
						
							| 
									
										
										
										
											2024-10-07 09:38:24 -07:00
										 |  |  | class _TestAgent(SequentialRoutedAgent): | 
					
						
							| 
									
										
										
										
											2024-09-28 10:40:33 -07:00
										 |  |  |     def __init__(self, description: str) -> None: | 
					
						
							| 
									
										
										
										
											2025-03-11 17:12:34 -07:00
										 |  |  |         super().__init__(description=description, sequential_message_types=[Message]) | 
					
						
							| 
									
										
										
										
											2024-09-28 10:40:33 -07:00
										 |  |  |         self.messages: List[Message] = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @message_handler | 
					
						
							|  |  |  |     async def handle_content_publish(self, message: Message, ctx: MessageContext) -> None: | 
					
						
							|  |  |  |         # Sleep a random amount of time to simulate processing time. | 
					
						
							|  |  |  |         await asyncio.sleep(random.random() / 100) | 
					
						
							|  |  |  |         self.messages.append(message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pytest.mark.asyncio | 
					
						
							|  |  |  | async def test_sequential_routed_agent() -> None: | 
					
						
							|  |  |  |     runtime = SingleThreadedAgentRuntime() | 
					
						
							|  |  |  |     runtime.start() | 
					
						
							| 
									
										
										
										
											2024-10-07 09:38:24 -07:00
										 |  |  |     await _TestAgent.register(runtime, type="test_agent", factory=lambda: _TestAgent(description="Test Agent")) | 
					
						
							| 
									
										
										
										
											2024-09-28 10:40:33 -07:00
										 |  |  |     test_agent_id = AgentId(type="test_agent", key="default") | 
					
						
							|  |  |  |     for i in range(100): | 
					
						
							|  |  |  |         await runtime.publish_message(Message(content=f"{i}"), topic_id=DefaultTopicId()) | 
					
						
							|  |  |  |     await runtime.stop_when_idle() | 
					
						
							| 
									
										
										
										
											2024-10-07 09:38:24 -07:00
										 |  |  |     test_agent = await runtime.try_get_underlying_agent_instance(test_agent_id, _TestAgent) | 
					
						
							| 
									
										
										
										
											2024-09-28 10:40:33 -07:00
										 |  |  |     for i in range(100): | 
					
						
							|  |  |  |         assert test_agent.messages[i].content == f"{i}" |