fix: default reasoning_content to empty string for DeepSeek#3149
Merged
Conversation
DeepSeek requires reasoning_content to be present on assistant messages even when there is no reasoning text. Add a new DefaultReasoningContent transformer that fills in an empty string when the field is None, gated only to the DeepSeek provider in the pipeline. Co-Authored-By: ForgeCode <noreply@forgecode.dev>
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.
Summary
Add a
DefaultReasoningContenttransformer that ensures thereasoning_contentfield is always present on messages sent to the DeepSeek provider, falling back to an empty string when no reasoning text exists.Context
DeepSeek requires
reasoning_contentto be present on assistant messages even when there is no reasoning text. Without this field, DeepSeek rejects the request. The existingReasoningContenttransformer extracts reasoning text fromreasoning_detailsbut leavesreasoning_contentasNonewhen there are no reasoning details. This new transformer fills in the gap.Changes
DefaultReasoningContenttransformer that setsreasoning_contentto an empty string when it isNoneKey Implementation Details
The new transformer runs after
ReasoningContentin the pipeline, so it only fills in the fallback whenReasoningContent(or any earlier transformer) left the field asNone. It is gated byis_deepseek_provider()and does not affect any other provider.Pipeline ordering:
Testing