Repository navigation
litellm: dejar preserve_thinking al default en qwen38-flash-next - #83
Merged
Merged
Conversation
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>
Contributor
Review automatica⏭️ Modelo no disponible, review omitida. timed out El perfil de computo de los Sparks se conmuta entre modelo |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
Y
preserve_thinking: Falseaparece 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
Falseparece que ahorra contexto y lo que hace es tirar la caché. El dato ya estaba en #82 y se interpretó al revés:preserve_thinking: False(#82)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
messagesy ya no escribe enextra_body. El renombradoreasoning_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_contractsigue siendo preexistente en main y ajeno.🤖 Generated with Claude Code