| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import asyncio
- import pytest
- from openhands.controller.agent_controller import AgentController
- from openhands.core.schema import AgentState
- from openhands.events import EventStream
- from openhands.events.action import MessageAction
- from openhands.events.event import EventSource
- class DummyAgent:
- def __init__(self):
- self.name = 'dummy'
- self.llm = type(
- 'DummyLLM',
- (),
- {'metrics': type('DummyMetrics', (), {'merge': lambda x: None})()},
- )()
- def reset(self):
- pass
- @pytest.mark.asyncio
- async def test_iteration_limit_extends_on_user_message():
- # Initialize test components
- from openhands.storage.memory import InMemoryFileStore
- file_store = InMemoryFileStore()
- event_stream = EventStream(sid='test', file_store=file_store)
- agent = DummyAgent()
- initial_max_iterations = 100
- controller = AgentController(
- agent=agent,
- event_stream=event_stream,
- max_iterations=initial_max_iterations,
- sid='test',
- headless_mode=False,
- )
- # Set initial state
- await controller.set_agent_state_to(AgentState.RUNNING)
- controller.state.iteration = 90 # Close to the limit
- assert controller.state.max_iterations == initial_max_iterations
- # Simulate user message
- user_message = MessageAction('test message', EventSource.USER)
- event_stream.add_event(user_message, EventSource.USER)
- await asyncio.sleep(0.1) # Give time for event to be processed
- # Verify max_iterations was extended
- assert controller.state.max_iterations == 90 + initial_max_iterations
- # Simulate more iterations and another user message
- controller.state.iteration = 180 # Close to new limit
- user_message2 = MessageAction('another message', EventSource.USER)
- event_stream.add_event(user_message2, EventSource.USER)
- await asyncio.sleep(0.1) # Give time for event to be processed
- # Verify max_iterations was extended again
- assert controller.state.max_iterations == 180 + initial_max_iterations
|