fix: strip reasoning parts from messages when switching to non-thinking models (#11571) #5
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.
Summary
Fixed bug where switching from a thinking model to a non-thinking model mid-session caused API errors due to reasoning parts being sent to models that don't support them.
Problem
When switching from a model with extended thinking (e.g., Claude Opus with thinking enabled) to a model without thinking support (e.g., GPT 5.2, Claude Sonnet without thinking) mid-session, an error occurred:
The root cause was that
reasoningparts from the previous model's responses were stored in message history. When switching to a model that doesn't support interleaved reasoning (capabilities.interleaved === false), these parts were still sent to the API, causing validation errors.Solution
Modified
normalizeMessages()inpackages/opencode/src/provider/transform.tsto check if the target model supports interleaved reasoning before including reasoning in providerOptions.Key Changes:
model.capabilities.interleavedis an object with afieldpropertyproviderOptions.openaiCompatible[field]when the model supports interleaved reasoningTechnical Details
The fix ensures:
reasoning_contentorreasoning_details)Benefits
Testing
Issue
Resolves anomalyco#11571 - Error switching from thinking model to non-thinking model mid-session