CLI autónomo para hacer debatir a dos LLM sobre una tesis dada por el usuario. La reescritura actual usa LangChain, LangGraph y Ollama con una arquitectura modular, prompts externos y compactación preventiva de contexto.
debater_atoma la postura a favor.debater_btoma la postura en contra.- Un guard de coherencia valida cada turno y fuerza una reescritura si un debatiente deriva hacia la postura rival.
refereerevisa cada ronda, detecta bucles, prohíbe líneas agotadas por debatiente y decide cuándo cerrar.compactorresume historial antes de saturarnum_ctx.refereeemite un veredicto final con ganador o empate.
src/debate_arena/
├── config/ # Carga y validación tipada de settings.yaml
├── domain/ # Modelos de dominio y resultados
├── graph/ # Orquestación LangGraph
├── llm/ # Factoría ChatOllama y contratos de modelos
├── prompts/ # Repositorio Jinja para prompts externos
└── services/ # Presupuesto de contexto, parsing y presentación
La configuración principal vive en config/settings.yaml y separa:
runtime: conexión con Ollamadebate: idioma, rondas y límites de respuestaprompt_repository: directorio de prompts y prompt de aperturacontext_policy: umbrales de compactación y buffer de contextomodels: configuración por rol, incluyendocontext_window
Todos los prompts viven en config/prompts/:
debater.j2opening_instruction.j2referee_review.j2referee_final.j2turn_guard.j2compactor.j2
python3 -m pip install -e .
debate-cli --config config/settings.yaml -p "La regulación de la IA debe ser global"
debate-cli -p "La educación universitaria debe ser gratuita" -f salida.txtCada llamada a Ollama registra prompt_eval_count y eval_count a través de ChatOllama. Esa telemetría, junto con una estimación conservadora del siguiente prompt, activa la compactación antes de acercarse al límite configurado de context_window.
python3 -m unittest discover -s tests