Carlexxx
feat: ✨ aBINC 2.2
fb56537
raw
history blame
3.92 kB
# 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()