ams-core-api / engines /task_executor.py
Amssou's picture
Update engines/task_executor.py
847e8ad verified
Raw
History Blame Contribute Delete
4.89 kB
import logging
logger = logging.getLogger("ONYX")
class TaskExecutor:
def __init__(self, engines, pipeline_engine):
self.engines = engines
self.pipeline_engine = pipeline_engine
# =========================
# GET ENGINE (LAZY LOADING)
# =========================
def _get_engine(self, name):
engine = self.engines.get(name)
if engine is None:
return None
# si c'est une fonction → lazy loading
if callable(engine):
try:
engine = engine()
except Exception as e:
logger.error(f"Lazy loading error for {name}: {e}")
return None
return engine
# =========================
# EXECUTE PLAN
# =========================
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:
# =========================
# IMAGE GENERATION
# =========================
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
# =========================
# VIDEO GENERATION
# =========================
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
# =========================
# CODE GENERATION
# =========================
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
# =========================
# WEB SEARCH
# =========================
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
# =========================
# EXPLANATION
# =========================
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
# =========================
# FALLBACK → PIPELINE
# =========================
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