Compare commits

...

3 Commits

2 changed files with 16 additions and 1 deletions

View File

@@ -312,6 +312,11 @@ class AgentController:
str(action),
extra={'msg_type': 'ACTION', 'event_source': EventSource.USER},
)
# Reset task and state when receiving a new user message after being stuck
if self.get_agent_state() == AgentState.ERROR:
self.reset_task()
self.state.almost_stuck = 0
self.state.traffic_control_state = TrafficControlState.NORMAL
if self.get_agent_state() != AgentState.RUNNING:
await self.set_agent_state_to(AgentState.RUNNING)
elif action.source == EventSource.AGENT and action.wait_for_response:
@@ -486,7 +491,9 @@ class AgentController:
return
if self._is_stuck():
await self._react_to_exception(RuntimeError('Agent got stuck in a loop'))
self.log('warning', 'Agent got stuck in a loop')
await self.set_agent_state_to(AgentState.ERROR)
self.state.last_error = 'Agent got stuck in a loop'
return
self.update_state_before_step()

View File

@@ -25,6 +25,14 @@ class StuckDetector:
self.state = state
def is_stuck(self):
# Check if there's a user message in the last event
if len(self.state.history) > 0:
last_event = self.state.history[-1]
if isinstance(last_event, MessageAction) and last_event.source == EventSource.USER:
# Reset almost_stuck state when user sends a message
self.state.almost_stuck = 0
return False
# filter out MessageAction with source='user' from history
filtered_history = [
event