Skip to content

litellm: dejar preserve_thinking al default en qwen38-flash-next - #83

Merged
pocharlies merged 1 commit into
mainfrom
fix-preserve-thinking-default
Sep 14, 2026
Merged

pocharlies merged 1 commit into
mainfrom
fix-preserve-thinking-default

Conversation

@pocharlies

Copy link
Copy Markdown
Collaborator

Corrige la decisión tomada esta mañana en #82. Lo señaló Jordi Ibáñez: en Flash-Next la recomendación es la contraria a la del 27B.

La fuente

Model card de Qwen3.8-Flash-Next, sección Disable Preserved Thinking:

By default, Qwen3.8-Flash-Next retains thinking blocks from all historical messages […] This behavior, known as preserved thinking, ensures full context continuity and is especially beneficial for agent scenarios where decision consistency and reduced redundant reasoning are critical. It also improves KV cache utilization.

Y preserve_thinking: False aparece como "if you prefer to retain only the thinking blocks from the latest user message" — una preferencia, no la recomendación.

En el 27B la recomendación es la contraria, pero ese modelo lo sirve SGLang y no está en FORWARD_REASONING_MODELS. #82 mezcló las dos.

Por qué se hizo mal

False parece que ahorra contexto y lo que hace es tirar la caché. El dato ya estaba en #82 y se interpretó al revés:

prefijo compartido al llegar un mensaje nuevo
default (este PR) 100 % → recomputa 1 token
preserve_thinking: False (#82) 30 % → recomputa 666 tokens

El thinking de los turnos anteriores desaparece del prompt retroactivamente y rompe el prefijo. Los tokens extra de un prefijo estable salen de caché; los de un prefijo roto hay que recomputarlos. Este backend arrastra ~81.000 tokens de prompt por petición, así que la caché no es un detalle — es literalmente el "improves KV cache utilization" del model card.

Qué cambia

El hook pasa a tocar solo messages y ya no escribe en extra_body. El renombrado reasoning_content → reasoning, que es lo que de verdad arreglaba el fallo mudo, se queda igual.

Tests: 10 casos actualizados (321 en la suite). El rojo de test_openrouter_access_contract sigue siendo preexistente en main y ajeno.

🤖 Generated with Claude Code

Correccion de la decision tomada esta misma manana en el PR #82. Ahi se mandaba
`chat_template_kwargs.preserve_thinking: False` para "acotar el thinking al turno
en curso". Va en contra de lo que recomienda el fabricante para ESTE modelo.

El model card de Qwen3.8-Flash-Next, seccion "Disable Preserved Thinking":

  "By default, Qwen3.8-Flash-Next retains thinking blocks from all historical
   messages [...] This behavior, known as preserved thinking, ensures full
   context continuity and is especially beneficial for agent scenarios where
   decision consistency and reduced redundant reasoning are critical. It also
   improves KV cache utilization"

y presenta `preserve_thinking: False` como "if you prefer to retain only the
thinking blocks from the latest user message" -- una preferencia, no la
recomendacion. En el 27B la recomendacion es la contraria, pero ese modelo lo
sirve SGLang y no esta en FORWARD_REASONING_MODELS: son dos cosas distintas y el
#82 las mezclo.

Lo contraintuitivo, y el motivo de haberlo hecho mal: `False` parece que ahorra
contexto y lo que hace es TIRAR la cache. Ya estaba medido en el propio #82 y se
interpreto al reves -- con el default el prefijo compartido entre turnos es del
100% (recomputa 1 token) y con `False` cae al 30% (~666 tokens a recomputar),
porque el thinking de los turnos anteriores desaparece del prompt
RETROACTIVAMENTE y rompe el prefijo. Los tokens extra de un prefijo estable
salen de la cache; los de un prefijo roto hay que recomputarlos. Este backend
arrastra ~81.000 tokens de prompt por peticion: la cache no es un detalle. Es
exactamente el "improves KV cache utilization" del model card.

El renombrado `reasoning_content` -> `reasoning`, que es lo que de verdad
arreglaba el fallo mudo, se queda igual. El hook pasa a tocar solo `messages` y
ya no escribe en extra_body.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@pocharlies
pocharlies merged commit 370e1ee into main Sep 14, 2026
@pocharlies
pocharlies deleted the fix-preserve-thinking-default branch September 14, 2026 15:19
@github-actions

Copy link
Copy Markdown
Contributor

Review automatica

⏭️ Modelo no disponible, review omitida. timed out

El perfil de computo de los Sparks se conmuta entre llm-tp y creative; en creative el modelo no tiene endpoints. El check queda en verde a proposito.

modelo tooling · revision no bloqueante

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant