language_models: Add thinking support to DeepSeek provider (#32338)

For DeepSeek provider thinking is returned as reasoning_content and we
don't have to send the reasoning_content back in the request.

Release Notes:

- Add thinking support to DeepSeek provider
This commit is contained in:
Umesh Yadav 2025-06-09 14:40:55 +05:30 committed by GitHub
parent 365997d79d
commit c75ad2fd11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -372,8 +372,7 @@ pub fn into_deepseek(
for message in request.messages { for message in request.messages {
for content in message.content { for content in message.content {
match content { match content {
MessageContent::Text(text) | MessageContent::Thinking { text, .. } => messages MessageContent::Text(text) => messages.push(match message.role {
.push(match message.role {
Role::User => deepseek::RequestMessage::User { content: text }, Role::User => deepseek::RequestMessage::User { content: text },
Role::Assistant => deepseek::RequestMessage::Assistant { Role::Assistant => deepseek::RequestMessage::Assistant {
content: Some(text), content: Some(text),
@ -381,6 +380,7 @@ pub fn into_deepseek(
}, },
Role::System => deepseek::RequestMessage::System { content: text }, Role::System => deepseek::RequestMessage::System { content: text },
}), }),
MessageContent::Thinking { .. } => {}
MessageContent::RedactedThinking(_) => {} MessageContent::RedactedThinking(_) => {}
MessageContent::Image(_) => {} MessageContent::Image(_) => {}
MessageContent::ToolUse(tool_use) => { MessageContent::ToolUse(tool_use) => {
@ -485,6 +485,13 @@ impl DeepSeekEventMapper {
events.push(Ok(LanguageModelCompletionEvent::Text(content))); events.push(Ok(LanguageModelCompletionEvent::Text(content)));
} }
if let Some(reasoning_content) = choice.delta.reasoning_content.clone() {
events.push(Ok(LanguageModelCompletionEvent::Thinking {
text: reasoning_content,
signature: None,
}));
}
if let Some(tool_calls) = choice.delta.tool_calls.as_ref() { if let Some(tool_calls) = choice.delta.tool_calls.as_ref() {
for tool_call in tool_calls { for tool_call in tool_calls {
let entry = self.tool_calls_by_index.entry(tool_call.index).or_default(); let entry = self.tool_calls_by_index.entry(tool_call.index).or_default();