fix: add empty reasoning_content for DeepSeek when switching providers #10172
+219
−12
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.
Related GitHub Issue
Closes: #10171
Description
This PR attempts to address Issue #10171. Feedback and guidance are welcome.
When switching from another provider (e.g., OpenAI) to DeepSeek reasoner mid-conversation, the DeepSeek API returns a 400 error: "Missing
reasoning_contentfield in the assistant message at message index N."This happens because:
reasoning_contentfieldreasoning_contentfield (even if empty)convertToR1Format()function preserves existingreasoning_contentbut does not add it to messages that lack itSolution:
addEmptyReasoningoption toconvertToR1Format()insrc/api/transform/r1-format.tsreasoning_content: ""to all assistant messages that do not already have reasoning contentsrc/api/providers/deepseek.ts, this option is enabled for thinking models (deepseek-reasoner)Test Procedure
addEmptyReasoningis truemergeToolResultTextandaddEmptyReasoningoptionsRun tests:
Pre-Submission Checklist
Documentation Updates
Additional Notes
This fix ensures backward compatibility since the
addEmptyReasoningoption defaults tofalse, and only affects DeepSeek reasoner models that require this field when switching providers mid-conversation.