Spaces:
Runtime error
Runtime error
Rename aduc_framework/engineers/deformes2D.py to aduc_framework/engineers/planner_2d.py
Browse files
aduc_framework/engineers/deformes2D.py
DELETED
|
@@ -1,79 +0,0 @@
|
|
| 1 |
-
# aduc_framework/engineers/deformes2D.py
|
| 2 |
-
#
|
| 3 |
-
# Copyright (C) August 4, 2025 Carlos Rodrigues dos Santos
|
| 4 |
-
#
|
| 5 |
-
# Versão 1.0.0 (High-Level Task Fragmenter)
|
| 6 |
-
|
| 7 |
-
import logging
|
| 8 |
-
from typing import List, Dict, Any
|
| 9 |
-
|
| 10 |
-
logger = logging.getLogger(__name__)
|
| 11 |
-
|
| 12 |
-
class Deformes2D:
|
| 13 |
-
"""
|
| 14 |
-
O Deformes2D atua como o Engenheiro-Chefe da pré-produção.
|
| 15 |
-
Sua responsabilidade é receber a demanda inicial e fragmentá-la em um
|
| 16 |
-
plano de execução de alto nível para o Composer.
|
| 17 |
-
Ele NÃO interage diretamente com o LLM.
|
| 18 |
-
"""
|
| 19 |
-
def create_pre_production_plan(
|
| 20 |
-
self,
|
| 21 |
-
global_prompt: str,
|
| 22 |
-
num_scenes: int,
|
| 23 |
-
max_duration_per_act: float
|
| 24 |
-
) -> List[Dict[str, Any]]:
|
| 25 |
-
"""
|
| 26 |
-
Cria a lista de tarefas estratégicas para a pré-produção.
|
| 27 |
-
"""
|
| 28 |
-
logger.info("Deformes2D: Criando plano de execução de pré-produção...")
|
| 29 |
-
|
| 30 |
-
# Este é o "Plano da Obra"
|
| 31 |
-
execution_plan = [
|
| 32 |
-
{
|
| 33 |
-
"task_id": "PREPROD_01_CATALOG_ASSETS",
|
| 34 |
-
"description": "Catalogar todos os assets visuais (cenários, personagens, objetos).",
|
| 35 |
-
"inputs": {"global_prompt": global_prompt},
|
| 36 |
-
"status": "pending"
|
| 37 |
-
},
|
| 38 |
-
{
|
| 39 |
-
"task_id": "PREPROD_02_SCORE_ASSETS",
|
| 40 |
-
"description": "Pontuar a relevância de cada asset para o contexto global.",
|
| 41 |
-
"inputs": {"global_prompt": global_prompt},
|
| 42 |
-
"depends_on": "PREPROD_01_CATALOG_ASSETS",
|
| 43 |
-
"status": "pending"
|
| 44 |
-
},
|
| 45 |
-
{
|
| 46 |
-
"task_id": "PREPROD_03_CREATE_SUMMARY",
|
| 47 |
-
"description": "Criar um resumo narrativo da história.",
|
| 48 |
-
"inputs": {"global_prompt": global_prompt, "num_scenes": num_scenes},
|
| 49 |
-
"depends_on": "PREPROD_02_SCORE_ASSETS",
|
| 50 |
-
"status": "pending"
|
| 51 |
-
},
|
| 52 |
-
{
|
| 53 |
-
"task_id": "PREPROD_04_FRAGMENT_SCENES",
|
| 54 |
-
"description": "Fragmentar o resumo da história em cenas principais.",
|
| 55 |
-
"inputs": {"num_scenes": num_scenes},
|
| 56 |
-
"depends_on": "PREPROD_03_CREATE_SUMMARY",
|
| 57 |
-
"status": "pending"
|
| 58 |
-
},
|
| 59 |
-
{
|
| 60 |
-
"task_id": "PREPROD_05_REVIEW_PLAN",
|
| 61 |
-
"description": "Revisar o plano de cenas e fazer ajustes de coerência.",
|
| 62 |
-
"inputs": {},
|
| 63 |
-
"depends_on": "PREPROD_04_FRAGMENT_SCENES",
|
| 64 |
-
"status": "pending"
|
| 65 |
-
},
|
| 66 |
-
{
|
| 67 |
-
"task_id": "PREPROD_06_FRAGMENT_ACTS",
|
| 68 |
-
"description": "Fragmentar cada cena em atos cinematográficos.",
|
| 69 |
-
"inputs": {"max_duration_per_act": max_duration_per_act},
|
| 70 |
-
"depends_on": "PREPROD_05_REVIEW_PLAN",
|
| 71 |
-
"status": "pending"
|
| 72 |
-
}
|
| 73 |
-
]
|
| 74 |
-
|
| 75 |
-
logger.info(f"Deformes2D: Plano de execução com {len(execution_plan)} tarefas criado.")
|
| 76 |
-
return execution_plan
|
| 77 |
-
|
| 78 |
-
# Instância Singleton
|
| 79 |
-
deformes_2d_singleton = Deformes2D()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
aduc_framework/engineers/planner_2d.py
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# aduc_framework/engineers/planner_2d.py
|
| 2 |
+
#
|
| 3 |
+
# Copyright (C) August 4, 2025 Carlos Rodrigues dos Santos
|
| 4 |
+
#
|
| 5 |
+
# Versão 1.1.0 (Strategic Execution Planner)
|
| 6 |
+
#
|
| 7 |
+
# O Planner2D atua como o Engenheiro-Chefe ou Planejador Estratégico.
|
| 8 |
+
# Sua responsabilidade é receber a demanda de alto nível do Orquestrador
|
| 9 |
+
# e fragmentá-la em um plano de execução de tarefas sequenciais para o Composer.
|
| 10 |
+
# Ele NÃO interage com o LLM.
|
| 11 |
+
|
| 12 |
+
import logging
|
| 13 |
+
from typing import List, Dict, Any, Generator, Optional, Callable
|
| 14 |
+
|
| 15 |
+
logger = logging.getLogger(__name__)
|
| 16 |
+
|
| 17 |
+
class Planner2D:
|
| 18 |
+
"""
|
| 19 |
+
O Planner2D cria o plano de trabalho estratégico (o `execution_plan`)
|
| 20 |
+
para a fase de pré-produção, que será executado pelo Composer.
|
| 21 |
+
"""
|
| 22 |
+
|
| 23 |
+
def generate_execution_plan(
|
| 24 |
+
self,
|
| 25 |
+
global_prompt: str,
|
| 26 |
+
num_scenes: int,
|
| 27 |
+
max_duration_per_act: float,
|
| 28 |
+
callback: Optional[Callable] = None
|
| 29 |
+
) -> Generator[Dict[str, Any], None, List[Dict[str, Any]]]:
|
| 30 |
+
"""
|
| 31 |
+
Cria e emite o plano de execução para a pré-produção.
|
| 32 |
+
|
| 33 |
+
Args:
|
| 34 |
+
global_prompt (str): A ideia central do filme.
|
| 35 |
+
num_scenes (int): O número de cenas desejadas.
|
| 36 |
+
max_duration_per_act (float): A duração máxima para cada ato.
|
| 37 |
+
callback (Callable, optional): Callback para reportar progresso ao Maestro.
|
| 38 |
+
|
| 39 |
+
Yields:
|
| 40 |
+
Dict[str, Any]: Dicionários de atualização de status para a UI.
|
| 41 |
+
|
| 42 |
+
Returns:
|
| 43 |
+
List[Dict[str, Any]]: A lista final de tarefas do plano de execução.
|
| 44 |
+
"""
|
| 45 |
+
message = "Planner2D: Criando plano de execução estratégico para a pré-produção..."
|
| 46 |
+
logger.info(message)
|
| 47 |
+
if callback:
|
| 48 |
+
# Informa o início do planejamento. Como é rápido, usamos progresso 0.0
|
| 49 |
+
callback(0.0, desc="Iniciando planejamento estratégico...")
|
| 50 |
+
|
| 51 |
+
# Emite um log inicial para a UI via Orquestrador
|
| 52 |
+
yield {"status": "planning", "progress": 0.0, "message": message}
|
| 53 |
+
|
| 54 |
+
# --- Definição do Plano de Execução Estratégico ---
|
| 55 |
+
# Esta é a "Planta da Obra", a sequência de tarefas que o Composer seguirá.
|
| 56 |
+
# Cada tarefa tem uma descrição clara para ser exibida na UI.
|
| 57 |
+
execution_plan = [
|
| 58 |
+
{
|
| 59 |
+
"task_id": "PREPROD_01_CATALOG_ASSETS",
|
| 60 |
+
"description": "Catalogando assets visuais (cenários, personagens, objetos)...",
|
| 61 |
+
"inputs": {"global_prompt": global_prompt},
|
| 62 |
+
"status": "pending"
|
| 63 |
+
},
|
| 64 |
+
{
|
| 65 |
+
"task_id": "PREPROD_02_SCORE_ASSETS",
|
| 66 |
+
"description": "Avaliando a relevância de cada asset para a história...",
|
| 67 |
+
"inputs": {"global_prompt": global_prompt},
|
| 68 |
+
"status": "pending"
|
| 69 |
+
},
|
| 70 |
+
{
|
| 71 |
+
"task_id": "PREPROD_03_CREATE_SUMMARY",
|
| 72 |
+
"description": "Criando o resumo do roteiro...",
|
| 73 |
+
"inputs": {"global_prompt": global_prompt, "num_scenes": num_scenes},
|
| 74 |
+
"status": "pending"
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"task_id": "PREPROD_04_FRAGMENT_SCENES",
|
| 78 |
+
"description": "Dividindo a história em cenas principais...",
|
| 79 |
+
"inputs": {"num_scenes": num_scenes},
|
| 80 |
+
"status": "pending"
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"task_id": "PREPROD_05_REVIEW_PLAN",
|
| 84 |
+
"description": "Revisando o plano de cenas para coerência...",
|
| 85 |
+
"inputs": {},
|
| 86 |
+
"status": "pending"
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"task_id": "PREPROD_06_FRAGMENT_ACTS",
|
| 90 |
+
"description": "Dividindo cada cena em atos cinematográficos...",
|
| 91 |
+
"inputs": {"max_duration_per_act": max_duration_per_act},
|
| 92 |
+
"status": "pending"
|
| 93 |
+
}
|
| 94 |
+
]
|
| 95 |
+
|
| 96 |
+
message = f"Planner2D: Plano de execução com {len(execution_plan)} tarefas criado."
|
| 97 |
+
logger.info(message)
|
| 98 |
+
if callback:
|
| 99 |
+
# Informa a conclusão do planejamento. Usamos um progresso pequeno (ex: 0.1)
|
| 100 |
+
# para indicar que esta fase terminou e a próxima, mais longa (Composer), vai começar.
|
| 101 |
+
callback(0.1, desc="Plano estratégico concluído. Iniciando execução...")
|
| 102 |
+
|
| 103 |
+
# Emite uma atualização final para a UI, incluindo o plano gerado
|
| 104 |
+
yield {"status": "planning_complete", "progress": 0.1, "message": message, "plan": execution_plan}
|
| 105 |
+
|
| 106 |
+
return execution_plan
|
| 107 |
+
|
| 108 |
+
# --- Instância Singleton ---
|
| 109 |
+
# A instância única do Planner2D para ser usada em todo o framework.
|
| 110 |
+
planner_2d_singleton = Planner2D()
|