| | from __future__ import annotations
|
| |
|
| | from pathlib import Path
|
| | from typing import Optional
|
| |
|
| | import yaml
|
| |
|
| | from .reflection import refine_srt_with_reflection, refine_video_with_reflection
|
| | from .reflection_ma import refine_srt_with_reflection_ma, refine_video_with_reflection_ma
|
| | from .reflexion import refine_srt_with_reflexion
|
| | from .introspection import refine_srt_with_introspection
|
| |
|
| |
|
| | def _load_refinement_flags(config_path: Optional[Path] = None) -> dict:
|
| | """Carga los flags de refinamiento desde config.yaml.
|
| |
|
| | Por defecto usa demo/config.yaml porque ahí están definidos los parámetros
|
| | `refinement.reflection_enabled`, `refinement.reflexion_enabled` e
|
| | `refinement.introspection_enabled`.
|
| | """
|
| |
|
| | if config_path is None:
|
| |
|
| | root = Path(__file__).resolve().parents[2]
|
| | config_path = root / "demo" / "config.yaml"
|
| |
|
| | flags = {
|
| | "reflection_enabled": True,
|
| | "reflexion_enabled": False,
|
| | "introspection_enabled": False,
|
| | "reflection_ma_enabled": False,
|
| | }
|
| |
|
| | try:
|
| | if config_path.exists():
|
| | with config_path.open("r", encoding="utf-8") as f:
|
| | cfg = yaml.safe_load(f) or {}
|
| | ref_cfg = cfg.get("refinement", {}) or {}
|
| | flags["reflection_enabled"] = bool(ref_cfg.get("reflection_enabled", flags["reflection_enabled"]))
|
| | flags["reflexion_enabled"] = bool(ref_cfg.get("reflexion_enabled", flags["reflexion_enabled"]))
|
| | flags["introspection_enabled"] = bool(ref_cfg.get("introspection_enabled", flags["introspection_enabled"]))
|
| | flags["reflection_ma_enabled"] = bool(ref_cfg.get("reflection_ma_enabled", flags["reflection_ma_enabled"]))
|
| | except Exception:
|
| |
|
| | pass
|
| |
|
| | return flags
|
| |
|
| |
|
| | def execute_refinement(initial_srt: str, *, config_path: Optional[Path] = None) -> str:
|
| | """Ejecuta el pipeline de refinamiento multi‑agente sobre un SRT.
|
| |
|
| | - Lee `refinement.*` de config.yaml para decidir qué pasos aplicar.
|
| | - Aplica, en este orden, si están habilitados:
|
| | 1) reflection (LangGraph principal)
|
| | 2) reflexion (ajustes de longitud/filtrado de pistes AD via KNN+LLM)
|
| | 3) introspection (aplicació de regles apreses de HITL via LLM)
|
| | - Devuelve el SRT final (o el original si ningún paso está activo).
|
| | """
|
| |
|
| | flags = _load_refinement_flags(config_path)
|
| |
|
| | srt = initial_srt
|
| |
|
| | if flags.get("reflection_ma_enabled", False):
|
| | srt = refine_srt_with_reflection_ma(srt)
|
| | elif flags.get("reflection_enabled", False):
|
| | srt = refine_srt_with_reflection(srt)
|
| |
|
| | if flags.get("reflexion_enabled", False):
|
| | srt = refine_srt_with_reflexion(srt)
|
| |
|
| | if flags.get("introspection_enabled", False):
|
| | srt = refine_srt_with_introspection(srt)
|
| |
|
| | return srt
|
| |
|
| |
|
| | def execute_refinement_for_video(
|
| | sha1sum: str,
|
| | version: str,
|
| | *,
|
| | config_path: Optional[Path] = None,
|
| | ) -> str:
|
| | """Executa el pipeline de refinament per a un vídeo (sha1sum, version).
|
| |
|
| | - Llegeix une_ad/json_ad/casting/scenarios des de les BDs de demo.
|
| | - Aplica, segons flags de config.yaml (o config_path):
|
| | 1) reflection: via `refine_video_with_reflection(sha1sum, version)`
|
| | 2) reflexion: ajustos de longitud/filtrat sobre el SRT resultat
|
| | 3) introspection: aplicació de regles apreses sobre el SRT resultat
|
| | - Retorna el SRT final.
|
| | """
|
| |
|
| | flags = _load_refinement_flags(config_path)
|
| |
|
| |
|
| | if flags.get("reflection_ma_enabled", False):
|
| | srt = refine_video_with_reflection_ma(sha1sum, version)
|
| | elif flags.get("reflection_enabled", False):
|
| | srt = refine_video_with_reflection(sha1sum, version)
|
| | else:
|
| |
|
| | from demo.databases import get_audiodescription
|
| |
|
| | row = get_audiodescription(sha1sum, version)
|
| | if row is None or "une_ad" not in row.keys():
|
| | raise ValueError(
|
| | f"No s'ha trobat une_ad a audiodescriptions.db per sha1sum={sha1sum}, version={version}"
|
| | )
|
| | srt = row["une_ad"] or ""
|
| |
|
| |
|
| | if flags.get("reflexion_enabled", False):
|
| | srt = refine_srt_with_reflexion(srt)
|
| |
|
| |
|
| | if flags.get("introspection_enabled", False):
|
| | srt = refine_srt_with_introspection(srt)
|
| |
|
| | return srt
|
| |
|
| |
|
| | if __name__ == "__main__":
|
| | demo_srt = """1\n00:00:00,000 --> 00:00:03,000\n(AD) Una noia entra a l'aula.\n"""
|
| | refined = execute_refinement(demo_srt)
|
| | print("=== SRT original ===")
|
| | print(demo_srt)
|
| | print("\n=== SRT refinat ===")
|
| | print(refined)
|
| |
|