Compresión de contexto y MoA
Responsabilidad
Dos tareas: ① cuando el historial se acerca al límite de contexto del provider, resumir/podar mensajes viejos para liberar presupuesto (context_compressor); ② opcionalmente, agregar la salida de varios modelos vía una ruta Mixture-of-Agents (moa_loop). Ambas se invocan dentro del bucle principal; son los componentes de soporte que «permiten que las conversaciones largas sigan corriendo» y «hacen las respuestas más estables».
Archivos clave
módulo context_compressor— entrada de compresión (unas 3700 líneas)estimación de presupuesto:190-242—_estimate_msg_budget_tokens/_serialized_length_for_budgetlimpieza de mensajes:136-155—_fresh_compaction_message_copy/_strip_persistence_markersextracción de llamadas a herramienta y menciones de ruta:337-360—_extract_tool_call_name_and_args/_collect_path_mentionsrecorte de contenido:472-515—_append_text_to_content/_strip_image_parts_from_partsmoa_loop— agregación Mixture-of-AgentsIterationBudget— reembolso de compresión y enlace con el presupuesto
Flujo de datos
- El bucle principal evalúa cada turno si hace falta comprimir (ver
_should_run_preflight_estimate:213). - Al alcanzar el umbral, llama a context_compressor:
- estima los tokens que ocupa cada mensaje (
agent/context_compressor.py:419) - hace una copia limpia de los mensajes viejos (
agent/context_compressor.py:136), quitando marcas de persistencia (agent/context_compressor.py:155) - conserva nombres/argumentos de llamadas a herramienta y menciones de ruta, para que el resumen no pierda operaciones clave (
agent/context_compressor.py:337) - recorta fragmentos de imagen y contenido excesivamente largo (
agent/context_compressor.py:472)
- estima los tokens que ocupa cada mensaje (
- El «nuevo espacio» liberado por la compresión se reembolsa parcialmente vía
iteration_budget.refund()(agent/iteration_budget.py), permitiendo al bucle principal correr unos turnos más. - Si MoA está activo,
moa_loopllama en paralelo a varios providers y los agrega, como mejora o árbitro de la respuesta principal.
Resumen
El compresor es el salvavidas de las conversaciones largas; la decisión central es «qué descartar, qué conservar»: prioriza las llamadas a herramienta y las menciones de ruta, porque perderlas dejaría «amnésicos» a los turnos siguientes. MoA es una mejora ortogonal, activable. Ninguno de los dos cambia la estructura del bucle principal; solo se insertan en el momento adecuado.