Spaces:
Sleeping
Sleeping
| # coding: utf-8 | |
| # Copyright (c) 2025 inclusionAI. | |
| from typing import Any, Callable | |
| from aworld.agents.llm_agent import Agent | |
| class LoopableAgent(Agent): | |
| """Support for loop agents in the swarm. | |
| The parameters of the extension function are the agent itself, which can obtain internal information of the agent. | |
| `stop_func` function example: | |
| >>> def stop(agent: LoopableAgent): | |
| >>> ... | |
| `loop_point_finder` function example: | |
| >>> def find(agent: LoopableAgent): | |
| >>> ... | |
| """ | |
| max_run_times: int = 1 | |
| cur_run_times: int = 0 | |
| # The loop agent special the loop point (agent name) | |
| loop_point: str = None | |
| # Used to determine the loop point for multiple loops | |
| loop_point_finder: Callable[..., Any] = None | |
| # def stop(agent: LoopableAgent): ... | |
| stop_func: Callable[..., Any] = None | |
| def goto(self): | |
| """The next loop point is what the loop agent wants to reach.""" | |
| if self.loop_point_finder: | |
| return self.loop_point_finder(self) | |
| if self.loop_point: | |
| return self.loop_point | |
| return self.id() | |
| def finished(self) -> bool: | |
| """Loop agent termination state detection, achieved loop count or termination condition.""" | |
| if self.cur_run_times >= self.max_run_times or (self.stop_func and self.stop_func(self)): | |
| self._finished = True | |
| return True | |
| self._finished = False | |
| return False | |