# aduc_framework/engineers/planner_2d.py # # Copyright (C) August 4, 2025 Carlos Rodrigues dos Santos # # Versão 2.1.0 (Focused 3-Step Plan) # Esta versão desativa temporariamente a Etapa 4 (revisão) para focar na # geração da estrutura de atos, que é o insumo para a próxima fase. # A mensagem final para o orquestrador foi aprimorada. import logging from typing import List, Dict, Any, Generator, Optional, Callable logger = logging.getLogger(__name__) class Planner2D: """ O Planner2D cria o plano de trabalho estratégico (o `execution_plan`) para a fase de pré-produção, focando na construção progressiva da narrativa. """ def generate_execution_plan( self, global_prompt: str, num_scenes: int, max_duration_per_act: float, fast_mode: bool, callback: Optional[Callable] = None ) -> Generator[Dict[str, Any], None, List[Dict[str, Any]]]: """ Cria e emite o plano de execução para a pré-produção. """ message = "Planner2D (Arquiteto): Criando novo plano de execução focado em narrativa..." logger.info(message) if callback: callback(0.0, desc="Arquiteto iniciando o planejamento...") yield {"status": "planning", "progress": 0.0, "message": message} execution_plan: List[Dict[str, Any]] if fast_mode: logger.info("Planner2D: Modo Rápido ativado. Consolidando tarefas de planejamento.") execution_plan = [ { "task_id": "FAST_01_GENERATE_SCENES_AND_ACTS", "description": "(Modo Rápido) Gerando a estrutura completa de Cenas e Atos...", "inputs": {"global_prompt": global_prompt, "num_scenes": num_scenes}, "status": "pending" } ] else: # --- MUDANÇA PRINCIPAL AQUI --- logger.info("Planner2D: Modo Detalhado ativado com 3 etapas (Etapa 4 desativada temporariamente).") execution_plan = [ { "task_id": "STEP_01_CREATE_CONTINUOUS_STORY", "description": "Etapa 1/3: Criando a história contínua...", "inputs": {"global_prompt": global_prompt, "num_scenes": num_scenes}, "status": "pending" }, { "task_id": "STEP_02_CREATE_INDEPENDENT_SCENES", "description": "Etapa 2/3: Refinando cada parágrafo em uma cena independente...", "inputs": {}, "status": "pending" }, { "task_id": "STEP_03_FRAGMENT_SCENES_INTO_ACTS", "description": "Etapa 3/3: Detalhando cada cena em atos independentes...", "inputs": {}, "status": "pending" }, # { # "task_id": "STEP_04_FINAL_REVIEW", # "description": "Etapa 4/4: Realizando a revisão final de coerência...", # "inputs": {"global_prompt": global_prompt}, # "status": "pending" # } ] # --- MENSAGEM FINAL APRIMORADA --- message = f"Planner2D (Arquiteto): Plano de pré-produção finalizado com {len(execution_plan)} etapas. Entregando para o Composer (Encarregado) executar." logger.info(message) if callback: callback(0.1, desc="Plano estratégico concluído. Iniciando execução...") # Este yield informa ao Orquestrador que o planejamento terminou e entrega o plano final. yield {"status": "planning_complete", "progress": 0.1, "message": message, "plan": execution_plan} return execution_plan # --- Instância Singleton --- planner_2d_singleton = Planner2D()