mirror of
https://github.com/OpenHands/OpenHands.git
synced 2026-03-22 13:47:19 +08:00
Enhance dead-loop recovery by pausing agent and reprompting (#11439)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com> Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
@@ -13,6 +13,7 @@ async def run_agent_until_done(
|
||||
runtime: Runtime,
|
||||
memory: Memory,
|
||||
end_states: list[AgentState],
|
||||
skip_set_callback: bool = False,
|
||||
) -> None:
|
||||
"""run_agent_until_done takes a controller and a runtime, and will run
|
||||
the agent until it reaches a terminal state.
|
||||
@@ -28,18 +29,19 @@ async def run_agent_until_done(
|
||||
else:
|
||||
logger.info(msg)
|
||||
|
||||
if hasattr(runtime, 'status_callback') and runtime.status_callback:
|
||||
raise ValueError(
|
||||
'Runtime status_callback was set, but run_agent_until_done will override it'
|
||||
)
|
||||
if hasattr(controller, 'status_callback') and controller.status_callback:
|
||||
raise ValueError(
|
||||
'Controller status_callback was set, but run_agent_until_done will override it'
|
||||
)
|
||||
if not skip_set_callback:
|
||||
if hasattr(runtime, 'status_callback') and runtime.status_callback:
|
||||
raise ValueError(
|
||||
'Runtime status_callback was set, but run_agent_until_done will override it'
|
||||
)
|
||||
if hasattr(controller, 'status_callback') and controller.status_callback:
|
||||
raise ValueError(
|
||||
'Controller status_callback was set, but run_agent_until_done will override it'
|
||||
)
|
||||
|
||||
runtime.status_callback = status_callback
|
||||
controller.status_callback = status_callback
|
||||
memory.status_callback = status_callback
|
||||
runtime.status_callback = status_callback
|
||||
controller.status_callback = status_callback
|
||||
memory.status_callback = status_callback
|
||||
|
||||
while controller.state.agent_state not in end_states:
|
||||
await asyncio.sleep(1)
|
||||
|
||||
@@ -97,3 +97,6 @@ class ActionType(str, Enum):
|
||||
|
||||
TASK_TRACKING = 'task_tracking'
|
||||
"""Views or updates the task list for task management."""
|
||||
|
||||
LOOP_RECOVERY = 'loop_recovery'
|
||||
"""Recover dead loop."""
|
||||
|
||||
@@ -58,3 +58,6 @@ class ObservationType(str, Enum):
|
||||
|
||||
TASK_TRACKING = 'task_tracking'
|
||||
"""Result of a task tracking operation"""
|
||||
|
||||
LOOP_DETECTION = 'loop_detection'
|
||||
"""Results of a dead-loop detection"""
|
||||
|
||||
Reference in New Issue
Block a user