| import logging | |
| logger = logging.getLogger("ONYX") | |
| class GoalLoopEngine: | |
| def __init__(self, planner, executor, max_steps=5): | |
| self.planner = planner | |
| self.executor = executor | |
| self.max_steps = max_steps | |
| # ========================= | |
| # RUN GOAL LOOP | |
| # ========================= | |
| def run(self, goal, context): | |
| logger.info(f"GoalLoop started: {goal}") | |
| history = [] | |
| result = None | |
| for step in range(self.max_steps): | |
| logger.info(f"GoalLoop step {step + 1}") | |
| plan = self.planner.plan(goal) | |
| result = self.executor.execute(plan, context) | |
| history.append(result) | |
| # condition simple d'arrêt | |
| if result.get("video") or result.get("image") or result.get("project"): | |
| logger.info("GoalLoop finished") | |
| break | |
| return { | |
| "result": result, | |
| "steps": history | |
| } |