REGISTRADO 2026-11-06 · REV A
¿Qué modelo local debería ejecutar un agente de código? Ronda 2: llama.cpp 0.9
Un mes después de la primera ronda: el mismo harness vuelve a medir la flota sobre llama.cpp 0.9.0 y Strata 0.1.57, esperando que el ranking sobreviviera. No sobrevivió — y los recibos cazaron el motivo.
La flota, entonces y ahora
| model | think | tools | code | agent | speed | global | was |
|---|---|---|---|---|---|---|---|
| minicpm-v-4.7-35b-a3b q4_k_m | on | 100% | 84% (10 excl.) | 92% | 23ms | 0.87 | 0.85 |
| qwen36-35b-distill-mxfp4_moe | off | 100% | 71% | 93% | 16ms | 0.87 | 0.84 |
| minicpm-v-4.7-35b-a3b q4_k_m | off | 100% | 80% (2 excl.) | 90% | 21ms | 0.86 | 0.85 |
| qwen3.8-27b-ud-q3_k_xl | off | 100% | 81% | 94% | 36ms | 0.83 | 0.82 |
| ornith-1.5-35b-a3b-apex-mtp-quality | off | 100% | 74% | 91% | 26ms | 0.82 | 0.82 |
| qwen3.8-27b-heretic-q4_k_m | on | 100% | 97% (7 excl.) | 97% | 1053ms | 0.84 | 0.80 |
| qwen3.8-27b-ud-q3_k_xl | on | 100% | 90% (3 excl.) | 96% | 686ms | 0.81 | 0.80 |
| ornith-1.5-35b-a3b-apex-mtp-quality | on | 94% | 87% (1 excl.) | 96% | 412ms | 0.79 | 0.77 |
| strata-iq3_xxs (strata engine 0.1.57) | on | 94% | 87% (4 excl.) | 94% | 398ms | 0.78 | 0.70 |
| gemma-4-26b-a4b-it-ud-q5_k_xl | on | 94% | 79% | 89% | 690ms | 0.75 | 0.74 |
| qwen36-35b-distill-mxfp4_moe | on | 94% | 74% (4 excl.) | 89% | 244ms | 0.73 | 0.72 |
| gemma-4-26b-a4b-it-ud-q5_k_xl | off | 89% | 83% | 89% | 32ms | 0.80 | 0.80 |
| strata-iq3_xxs (strata engine 0.1.57) | off | 89% | 83% | 90% | 36ms | 0.80 | 0.80 |
| qwen3.8-27b-heretic-q4_k_m | off | 100% | 81% | 93% | 66ms | 0.80 | 0.81 |
Las filas ON corrieron con caps de generación 1024/8192 y las OFF con los defaults de la flota 128/512; la distancia entre esos dos es el primer hallazgo. Pasada de una sola tirada, semilla 42: cada número aquí es una medición donde las de octubre eran la media de tres, y las columnas ± vuelven con la pasada de 3 semillas. La fila turbofcfusion-neo-coder queda como registro — su quant ya no está en disco.
El error que merece tu tiempo: los caps
Lo primero que volví a medir se colapsó. Las puntuaciones de agente cayeron al 58% y 64% donde octubre decía 96% y 97%, con los modelos respondiendo vacío en el primer turno. Los recibos dijeron por qué: la cadena de thinking quemó todo el presupuesto de turno de 512 tokens antes de ninguna tool call, y el episodio siguió con un agujero dentro. La flota de octubre corrió las filas ON a 1024/8192; esta pasada las corrió primero con los defaults del harness, 128/512.
Nada en los modelos se había degradado; las condiciones del harness sí. Devuelta a correr con los caps justos, el colapso se invirtió — UD-Q3 de vuelta al 96% de agente, Heretic al 97% — y ON pasó de ser un impuesto a ser una victoria en casi todas partes. Si mides modelos agénticos, llévate esto: un modelo thinking medido con caps de respuesta directa mide el harness, no el modelo. El modo de fallo (respuestas vacías, un turno, sin error) se parece exactamente a una regresión del modelo a menos que los recibos lo registren. Los míos lo hicieron; por eso existe este párrafo.
Lo que se movió con el motor
Cuatro cosas destacaron.
El thinking dejó de ser solo una herramienta de código difícil
En octubre, ON compraba calidad solo en el nivel difícil. Esta vez ON mejoró a seis de siete modelos. Heretic-on publica el mejor código y agente de la flota, 97% en ambos, y MiniCPM-on empata la cima de la tabla en 0.87 manteniendo sus turnos de 23ms — sigue siendo el único modelo cuyo thinking es gratis.
Strata se llevó la mayor ganancia
De 0.70 a 0.78 con el motor 0.1.57 y los caps justos; tools pasó de 78 a 94% y agente de 77 a 94%. Su fila OFF se quedó en 0.80, así que el trabajo del motor aterrizó específicamente en modo thinking.
OFF se quedó en su sitio, salvo tools
llama.cpp 0.9 mantuvo cada global de OFF dentro de ±0.03 de octubre, y la mayoría de las filas se movieron menos que la dispersión entre tiradas. El movimiento estuvo en el tool calling: qwen36 pasó de 94 a 100% con turnos a 16ms, mientras Heretic cambia cinco puntos de código por un turno 19ms más rápido.
La cima ahora es un empate entre modos
Los empates de octubre eran entre filas OFF. Esta vez MiniCPM-on 0.87 iguala a qwen36-off 0.87, así que la elección es por uso: qwen36-off para turnos de 16ms, MiniCPM-on para 84% de código con recibos.
¿Cuánto contexto quema un modelo para pasar?
La pregunta que dejó un lector en la primera ronda: el bucle de agente reenvía toda la conversación en cada turno, así que dos modelos con el mismo porcentaje de acierto pueden costar muy diferente en tokens enviados. Hasta ahora el harness contaba lo que el modelo emitía (out_tokens) y no lo que leía. Esta ronda cada fila lleva recibos de contexto — in_tokens por llamada para tools y código, tokens por sesión de agente sumados sobre los turnos del episodio, media y mediana sobre las 72 sesiones de la flota.
| model | think | tools in/call | code in/call | agent session avg | agent session median |
|---|---|---|---|---|---|
| qwen36-35b-distill-mxfp4_moe | off | 305 / 294 | 187 / 115 | 4,839 | 3,789 |
| minicpm-v-4.7-35b-a3b q4_k_m | off | 305 / 294 | 187 / 115 | 4,502 | 3,643 |
| qwen3.8-27b-ud-q3_k_xl | off | 305 / 294 | 187 / 115 | 5,150 | 3,913 |
| ornith-1.5-35b-a3b-apex-mtp-quality | off | 305 / 294 | 187 / 115 | 5,155 | 4,120 |
| qwen3.8-27b-heretic-q4_k_m | off | 305 / 294 | 187 / 115 | 5,404 | 3,817 |
| gemma-4-26b-a4b-it-ud-q5_k_xl | off | 104 / 86 | 190 / 116 | 4,412 | 3,048 |
| strata-iq3_xxs (strata engine 0.1.57) | off | 289 / 281 | 187 / 115 | 4,663 | 3,512 |
| qwen36-35b-distill-mxfp4_moe | on | 303 / 292 | 185 / 113 | 6,086 | 4,200 |
| minicpm-v-4.7-35b-a3b q4_k_m | on | 303 / 292 | 185 / 113 | 6,186 | 4,465 |
| qwen3.8-27b-ud-q3_k_xl | on | 341 / 330 | 223 / 151 | 9,057 | 6,130 |
| ornith-1.5-35b-a3b-apex-mtp-quality | on | 303 / 292 | 185 / 113 | 10,758 | 6,353 |
| strata-iq3_xxs (strata engine 0.1.57) | on | 326 / 317 | 223 / 151 | 10,101 | 6,058 |
| qwen3.8-27b-heretic-q4_k_m | on | 341 / 330 | 223 / 151 | 8,500 | 4,710 |
| gemma-4-26b-a4b-it-ud-q5_k_xl | on | 102 / 84 | 188 / 114 | 11,060 | 7,740 |
Tres cosas que dicen los recibos.
La quemadura por llamada es plana
Cerca de 290-340 tokens de entrada por tool call y 185-220 por llamada de código en todas partes, porque esos prompts son las mismas tareas. Toda la varianza vive en el bucle de agente, donde la conversación crece.
El thinking también es un impuesto de contexto
Mismo modelo, mismas tareas, ON contra OFF: +26% de tokens de sesión en qwen36, +57% en Heretic, +76% en UD-Q3, +117% en Strata, +151% en gemma. La tabla de latencias ya mostró un coste del thinking; los recibos muestran el segundo.
La calidad por token quemado es su propio ranking
qwen36-off entrega el empate en la cima, 0.87, con 4.8K de tokens por sesión, y MiniCPM-on el mismo 0.87 con 6.2K — el pensador barato. En el otro extremo, gemma-on quema el máximo de contexto de la flota (11.1K de media, 7.7K mediana) para 0.75, y Strata-on paga 10.1K por 0.78. El trabajo del motor compró sus puntos caros.
Lo que te diría que hicieras
Igual que la última vez, con una enmienda. Mide en tu propio hardware, lee las exclusiones, trata las filas cercanas como empates, y cuando una puntuación se mueva, revisa los caps antes de creerle al modelo. Una actualización de motor no cambia lo que un modelo sabe; cambia cómo cuenta la fontanería. La flota sigue sin tener un único ganador: tools y turnos baratos son de qwen36-off, código y agente ahora son de Heretic-on, la calidad agnóstica de velocidad es de MiniCPM, y el despacho de formato largo es de Strata, que acaba de cerrar casi todo el hueco que su primera ronda dejó abierto.
Marcador e informe en vivo: jordimarsal.github.io/ggufbench. Código, tareas y recibos: github.com/jordimarsal/ggufbench. La primera ronda, para contexto: qué modelo local debería ejecutar un agente de código.