La compactación de Hermes estrena un default lean: los modelos de ventana grande dejan de acumular colas de 170K tokens


Imagina esto: estás en una sesión maratón con un modelo de contexto de 1M, llegas al medio millón de tokens, las cosas empiezan a ir lentas, así que escribes /compress para aligerar el contexto — y la sesión apenas se reduce. Cada turno posterior sigue enviando al modelo una «cola» de más de cien mil tokens, y tu factura se infla en silencio. No es tu imaginación: la fórmula legacy de compactación escala la cola verbatim con el tamaño de ventana y el umbral, así que en modelos de ventana grande acumula silenciosamente 100K–240K tokens de historial verbatim en cada compactación. Un commit fusionado el 26 de agosto (6e5413844e) cambió el default: el nuevo modo lean conserva solo una cola pequeña y limitada, y el espacio recuperado es dramático.

Por qué la fórmula antigua empezó a acumular en los modelos modernos

Cuando se ejecuta la compactación, Hermes divide la sesión en un «summary» (memoria a largo plazo) y una «cola» (contenido verbatim reciente que mantiene la continuidad). El presupuesto por defecto legacy era threshold × target_ratio — una fórmula diseñada en torno a ventanas de 128K con un disparador al 50 %, que producía una cola razonable de ~13K tokens.

Pero a medida que crecían las ventanas de los modelos, la fórmula seguía escalando de forma proporcional: una sesión con ventana de 1M y threshold 0.85 obtiene una cola verbatim de 170K tokens (techo blando de 255K) en modo legacy. Un /compress manual en una sesión de 540K aterriza en ~290K — el acaparamiento vuelve inútil la compactación, y cada turno reenvía esos tokens al modelo, quemando dinero dos veces.

El nuevo default: modo lean (#87326 compaction-v2)

El modo lean trata la cola como una pequeña ventana de actualidad en lugar de un almacén de contexto. En concreto:

  • Presupuesto de cola = 2,5 % del tamaño de ventana, con un mínimo de 10K y un tope de 25K tokens;
  • La continuidad ya no depende de una cola grande — viaja en el summary mejorado: resúmenes de contenido, un índice de anclas, mensajes de usuario verbatim y punteros de recuperación de session_search;
  • La recuperación se validó con un eval de antes/después (evals/compaction/results/), no a ojo.

Comparativa (imports reales, ventana de 1M @ threshold 0.85):

Escenario Presupuesto de cola verbatim
Antiguo default (legacy) 170,000 (techo 255,000)
Nuevo default (lean) 25,000 (techo 37,500)
Vuelta explícita a legacy 170,000 (opt-out intacto)
Cambio a mitad de sesión a un modelo de 400K (lean preservado) 10,000

También corrige un bug latente: update_model() solía reasignar directamente la fórmula legacy al recalcular presupuestos, revirtiendo en silencio un compresor lean al acaparamiento en cada cambio de modelo a mitad de sesión. El recálculo ahora pasa por la propiedad tail_token_budget, que conoce el modo (incluye test de regresión).

Comprobar y ajustar la configuración

Inspecciona tu configuración actual:

hermes config get compression.tail_mode    # ahora usa lean por defecto
hermes config get compression.threshold    # default 0.50 (disparador al 50 %)
hermes config get compression.target_ratio # default 0.20

Para recuperar el comportamiento anterior, defínelo explícitamente en config.yaml:

compression:
  tail_mode: legacy   # fórmula antigua: 0.20 × threshold, acumula en ventanas grandes

Nota: compression.tail_mode también es ahora una clave de invalidación de caché del gateway — cambiarla expulsa los gateway agents cacheados igual que hacen los cambios en target_ratio, sin necesidad de reiniciar el gateway por completo.

Cuándo usar cada una

Para la mayoría, mantén el default lean: ahorra dinero, libera espacio real en /compress, y el summary lleva punteros de recuperación como red de seguridad. Solo si de verdad te topas con «se perdió información importante» tras una compactación (por ejemplo, la salida de una herramienta crítica en una sesión larga que el resumen no cubrió) merece la pena volver a legacy para comparar — a costa de decenas de miles de tokens de entrada extra por turno.

Para terminar

Este cambio reequilibra «cuánto texto original conservar»: de un accidente derivado de una fórmula a ingeniería acotada. La continuidad viene de un summary más inteligente, y la cola es solo una ventana reciente. Si /compress te parecía inútil en modelos de ventana grande, actualiza al último dev build y prueba de nuevo — la diferencia es como de la noche al día. La compactación es solo una pieza de la resistencia en sesiones largas: combínala con max_turns ilimitados y la exportación de sesiones y las tareas largas pueden correr sin preocupaciones. Para el desglose completo campo por campo de los presupuestos de contexto, consulta la guía de configuración de tareas largas.