| import logging |
|
|
| logger = logging.getLogger("ONYX") |
|
|
|
|
| class TaskExecutor: |
|
|
| def __init__(self, engines, pipeline_engine): |
|
|
| self.engines = engines |
| self.pipeline_engine = pipeline_engine |
|
|
| |
| |
| |
|
|
| def _get_engine(self, name): |
|
|
| engine = self.engines.get(name) |
|
|
| if engine is None: |
| return None |
|
|
| |
| if callable(engine): |
| try: |
| engine = engine() |
| except Exception as e: |
| logger.error(f"Lazy loading error for {name}: {e}") |
| return None |
|
|
| return engine |
|
|
| |
| |
| |
|
|
| def execute(self, plan, context): |
|
|
| objective = plan.get("objective") |
| tasks = plan.get("tasks", []) |
|
|
| logger.info(f"Executor objective: {objective}") |
| logger.info(f"Executor tasks: {tasks}") |
|
|
| result = { |
| "script": None, |
| "image": None |
| } |
|
|
| try: |
|
|
| |
| |
| |
|
|
| if objective == "create_image": |
|
|
| logger.info("Executing image pipeline") |
|
|
| if self.pipeline_engine is None: |
| result["script"] = "Pipeline de génération non disponible." |
| return result |
|
|
| pipeline_result = self.pipeline_engine.generate_video(context.theme) |
|
|
| result["script"] = pipeline_result.get("script") |
| result["image"] = pipeline_result.get("image") |
|
|
| return result |
|
|
| |
| |
| |
|
|
| if objective == "create_video": |
|
|
| logger.info("Executing video pipeline") |
|
|
| if self.pipeline_engine is None: |
| result["script"] = "Pipeline vidéo non disponible." |
| return result |
|
|
| video_result = self.pipeline_engine.generate_video(context.theme) |
|
|
| result["script"] = video_result.get("script") |
| result["image"] = video_result.get("image") |
|
|
| return result |
|
|
| |
| |
| |
|
|
| if objective == "create_code": |
|
|
| logger.info("Executing code engine") |
|
|
| engine = self._get_engine("code_engine") |
|
|
| if engine is None: |
| result["script"] = "Code engine non disponible." |
| return result |
|
|
| project = engine.generate_project(context.theme) |
|
|
| path = project.get("path") |
|
|
| result["script"] = f"Projet généré dans : {path}" |
|
|
| return result |
|
|
| |
| |
| |
|
|
| if objective == "web_search": |
|
|
| logger.info("Executing web engine") |
|
|
| engine = self._get_engine("web_engine") |
|
|
| if engine is None: |
| result["script"] = "Web engine non disponible." |
| return result |
|
|
| results = engine.search(context.theme) |
|
|
| analysis = engine.analyze_trend(context.theme) |
|
|
| result["script"] = analysis |
| result["web_results"] = results |
|
|
| return result |
|
|
| |
| |
| |
|
|
| if objective == "explain": |
|
|
| logger.info("Executing explanation engine") |
|
|
| engine = self._get_engine("explanation_engine") |
|
|
| if engine is None: |
| result["script"] = "Explanation engine non disponible." |
| return result |
|
|
| explanation = engine.explain(context.theme) |
|
|
| result["script"] = explanation |
|
|
| return result |
|
|
| |
| |
| |
|
|
| logger.info("Fallback pipeline execution") |
|
|
| if self.pipeline_engine: |
|
|
| pipeline_result = self.pipeline_engine.generate_video(context.theme) |
|
|
| result["script"] = pipeline_result.get("script") |
| result["image"] = pipeline_result.get("image") |
|
|
| return result |
|
|
| except Exception as e: |
|
|
| logger.error(f"Executor error: {e}") |
|
|
| result["script"] = f"Erreur lors de l'exécution : {str(e)}" |
|
|
| return result |
|
|
| result["script"] = "Aucune tâche exécutée." |
|
|
| return result |