Spaces:
Paused
Paused
| # 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() |