import logging from datetime import datetime from core.context import PipelineContext logger = logging.getLogger("ONYX") class AgentRuntime: def __init__( self, planner, strategy_engine, message_parser, trend_engine, executor, memory, knowledge_engine ): self.planner = planner self.strategy_engine = strategy_engine self.message_parser = message_parser self.trend_engine = trend_engine self.executor = executor self.memory = memory self.knowledge_engine = knowledge_engine # ========================= # PROCESS REQUEST # ========================= def process(self, message): try: clean_message = message.strip() if not clean_message: return {"script": None, "image": None} # ========================= # PLANNER # ========================= plan = self.planner.plan(clean_message) logger.info(f"Runtime plan: {plan}") # ========================= # STRATEGY # ========================= try: strategy = self.strategy_engine.build_strategy(clean_message) logger.info(f"Runtime strategy: {strategy}") except Exception: strategy = None # ========================= # THEME # ========================= theme = clean_message # ========================= # KNOWLEDGE SEARCH # ========================= try: previous_knowledge = self.knowledge_engine.search(theme) except Exception: previous_knowledge = [] # ========================= # TREND (désactivé pour les images) # ========================= # On garde le thème original pour éviter # des phrases comme : # "Ce que la psychologie révèle sur ..." trend_theme = theme # ========================= # CONTEXT # ========================= context = PipelineContext(trend_theme) context.metadata["knowledge"] = previous_knowledge # ========================= # EXECUTION # ========================= result = self.executor.execute(plan, context) if not result: return {"script": None, "image": None} script = result.get("script") image = result.get("image") # ========================= # SAVE MEMORY # ========================= if script: try: self.memory.add_exchange(clean_message, script) self.knowledge_engine.store({ "timestamp": datetime.utcnow().isoformat(), "theme": theme, "request": clean_message, "result": script }) except Exception: pass return { "script": script, "image": image } except Exception as e: logger.error(f"Runtime error: {e}") return { "script": None, "image": None }