Hermes deja de adivinar el tamaño de tu contexto: el anclaje de uso alinea los umbrales de compresión con números reales

Tu sesión llega al turno 40 y todo va bien — hasta que, de la nada, aparece un aviso de «contexto demasiado largo, comprimiendo», aunque estés lejísimos del límite de la ventana. O un día la API lanza un error 413 diciendo que la petición es demasiado grande, cuando la conversación claramente no es tan larga. Ambos escenarios solían ser habituales en Hermes y comparten una única causa raíz: Hermes estaba adivinando el tamaño de tu contexto — reestimando todo el transcript turno tras turno con heurísticas como chars/4 e imágenes planas de 1500 tokens, dejando que el error se acumulara a medida que crecía el historial. El cambio fusionado el 28 de agosto (PR #97206) arranca esa raíz: el recuento de contexto ahora se ancla en el uso reportado por el provider, y la ventana de estimación se reduce de «toda la conversación» a «los mensajes añadidos desde la última respuesta».
Antes: estimación de todo el transcript, error en bola de nieve
Cada respuesta del provider lleva en realidad un informe de uso preciso: usage.prompt_tokens (exactamente cuántos tokens envió esta petición, incluyendo system prompt, tool schemas e historial completo) y usage.completion_tokens (cuántos se generaron). El proveedor del modelo los cuenta por sí mismo — eso es ground truth real.
Pero el viejo Hermes apenas lo usaba. Cada vez que necesitaba comprobar el tamaño del contexto, reestimaba toda la sesión con heurísticas: caracteres ASCII divididos por 4, 1500 tokens planos por imagen, reglas de densidad CJK… La estimación estaba bien al principio de la sesión, pero a medida que crecía el historial, el error se acumulaba. Algunas sesiones se sobreestimaban — se comprimían antes de tocar el umbral; otras se subestimaban — la petición superaba el límite del provider y recibía un 413. Los issues #89938 y #88960 son ejemplos típicos de esta clase «estimación vs. realidad».
Nuevo mecanismo: anclaje de uso, ventana de error reducida a un turno
El núcleo del PR #97206 es una fórmula:
current context tokens =
last response's usage.prompt_tokens
+ last response's usage.completion_tokens
+ estimate(ONLY messages appended since that response)
En otras palabras: el tamaño real de toda la conversación sale directamente de los números del provider; solo el puñado de mensajes añadidos desde la última respuesta necesita estimación. La ventana de error se reduce de «todo el transcript» a «un turno» — y se autocorrige en cada respuesta, porque el valor real es el punto de partida, nunca algo que la estimación tenga que perseguir.
El ancla se captura en exactamente un punto: el bloque de uso justo después de context_compressor.update_from_response() en el bucle principal de la conversación (capture_usage_anchor), actualizado en cada respuesta. Los umbrales de compresión y la lógica de recuperación de 413 pasan todos a este número anclado.
Arreglos acompañantes: la recuperación de 413 cuenta bytes
La misma ola trae arreglos acompañantes (#97197 y compañía): la recuperación de 413 solía medir el tamaño de la petición en tokens estimados — ahora mide bytes reales, porque el juicio de 413 del provider se basa en el tamaño del payload HTTP, y ninguna estimación de tokens se convierte a bytes correctamente. El compresor además ahora libera de verdad los bytes que ocupan las imágenes históricas durante la compactación (#97160), así que la recuperación de 413 no es «apenas pasar» sino «liberar espacio de verdad».
Qué significa esto para ti
- Menos compresiones sorpresa: los chequeos de umbral se alinean con números reales, las sesiones dejan de estar «virtualmente infladas» y de comprimirse antes de tiempo;
- Menos 413: los chequeos de tamaño de petición pasan de estimaciones a conteos de bytes, las sesiones largas dejan de morir al azar con «payload demasiado grande»;
- /context honesto: los números que ves coinciden con los de la factura de tu provider — lo que ves es real.
El mantenedor Teknium lo dijo sin rodeos: «Estoy realmente cansado de que estimemos tokens. Dejad de estimar cosas». Esta ola es esa frase convertida en código.
Estos cambios se fusionaron el 28 de agosto y viven actualmente en main de upstream, todavía sin release tag. Se aplican automáticamente en cuanto hagas hermes update a una build que los incluya.
Lecturas recomendadas
- ¿Quieres la visión general de la compresión de contexto de Hermes? Consulta la guía de reducción de contexto en cuatro capas;
- ¿Te interesa el nuevo valor por defecto de compresión lean-tail? Lee el nuevo valor por defecto de la estrategia de compresión;
- Para un ajuste sistemático del coste de tokens, consulta la guía de configuración para tareas largas.