Spaces:
Build error
Build error
import asyncio | |
from openhands.controller import AgentController | |
from openhands.core.logger import openhands_logger as logger | |
from openhands.core.schema import AgentState | |
from openhands.memory.memory import Memory | |
from openhands.runtime.base import Runtime | |
async def run_agent_until_done( | |
controller: AgentController, | |
runtime: Runtime, | |
memory: Memory, | |
end_states: list[AgentState], | |
) -> None: | |
""" | |
run_agent_until_done takes a controller and a runtime, and will run | |
the agent until it reaches a terminal state. | |
Note that runtime must be connected before being passed in here. | |
""" | |
def status_callback(msg_type: str, msg_id: str, msg: str) -> None: | |
if msg_type == 'error': | |
logger.error(msg) | |
if controller: | |
controller.state.last_error = msg | |
asyncio.create_task(controller.set_agent_state_to(AgentState.ERROR)) | |
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' | |
) | |
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) | |