Add dummy reasoning_content for deepseek-reasoner tool calls #4857

9aff57c9c43d2b006709cc79f5e311659048abdd

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +24 -0Showing whitespace changes
src/endpoints/backends/chat-completions.js+5 -0
@@ -44,6 +44,7 @@ import {
4444 PROMPT_PROCESSING_TYPE,
4545 addAssistantPrefix,
4646 embedOpenRouterMedia,
47+ addReasoningContentToToolCalls,
4748} from '../../prompt-converters.js';
4849
4950import { readSecret, SECRET_KEYS } from '../secrets.js';
@@ -981,6 +982,10 @@ async function sendDeepSeekRequest(request, response) {
981982
982983 const processedMessages = addAssistantPrefix(postProcessPrompt(request.body.messages, PROMPT_PROCESSING_TYPE.SEMI_TOOLS, getPromptNames(request)), bodyParams.tools, 'prefix');
983984
985+ if (/-reasoner/.test(request.body.model)) {
986+ addReasoningContentToToolCalls(processedMessages);
987+ }
988+
984989 const requestBody = {
985990 'messages': processedMessages,
986991 'model': request.body.model,
src/prompt-converters.js+19 -0
@@ -1209,3 +1209,22 @@ export function embedOpenRouterMedia(messages) {
12091209 }
12101210 }
12111211}
1212+
1213+/**
1214+ * Adds a dummy reasoning_content field to messages with tool calls for DeepSeek reasoner.
1215+ * @param {object[]} messages Array of messages
1216+ * @returns {void}
1217+ */
1218+export function addReasoningContentToToolCalls(messages) {
1219+ if (!Array.isArray(messages)) {
1220+ return;
1221+ }
1222+
1223+ for (const message of messages) {
1224+ if (!Array.isArray(message.tool_calls) || 'reasoning_content' in message) {
1225+ continue;
1226+ }
1227+
1228+ message.reasoning_content = '';
1229+ }
1230+}