-
Notifications
You must be signed in to change notification settings - Fork 9.9k
fix: strip reasoning parts from messages when switching to non-thinking models (#11571) #11590
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: strip reasoning parts from messages when switching to non-thinking models (#11571) #11590
Conversation
…ng models (anomalyco#11571) When switching from a model with extended thinking (e.g., Claude Opus) to a model without thinking support (e.g., GPT 5.2, Claude Sonnet without thinking) mid-session, reasoning parts from previous messages were still being sent to the API, causing validation errors. This fix ensures that reasoning parts are only included in providerOptions when the target model supports interleaved reasoning (capabilities.interleaved is an object with a field). For models that don't support interleaved reasoning, the reasoning parts are filtered out from the content array but not added to providerOptions, preventing the API error. Changes: - Modified normalizeMessages() in transform.ts to check if model supports interleaved reasoning before including reasoning in providerOptions - Reasoning parts are now correctly filtered for both thinking and non-thinking models
|
The following comment was made by an LLM, it may be inaccurate: Potential Duplicate FoundPR #11572 - "fix: strip reasoning parts when switching to non-interleaved models" This appears to be a near-duplicate or very closely related PR that addresses the same issue. Both PRs are solving the problem of stripping reasoning parts when switching between models with different reasoning/interleaving capabilities. Other Related PRs (different scope but similar theme):
Recommendation: Check if PR #11572 is already merged or if it covers the same solution to #11571. If both are open, one should likely be closed as a duplicate. |
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
…ing to non-thinking models (#11571)
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 #11571 - Error switching from thinking model to non-thinking model mid-session