Add dummy reasoning_content for deepseek-reasoner tool calls #4857
| @@ -44,6 +44,7 @@ import { | ||
| 44 | 44 | PROMPT_PROCESSING_TYPE, |
| 45 | 45 | addAssistantPrefix, |
| 46 | 46 | embedOpenRouterMedia, |
| 47 | + addReasoningContentToToolCalls, | |
| 47 | 48 | } from '../../prompt-converters.js'; |
| 48 | 49 | |
| 49 | 50 | import { readSecret, SECRET_KEYS } from '../secrets.js'; |
| @@ -981,6 +982,10 @@ async function sendDeepSeekRequest(request, response) { | ||
| 981 | 982 | |
| 982 | 983 | const processedMessages = addAssistantPrefix(postProcessPrompt(request.body.messages, PROMPT_PROCESSING_TYPE.SEMI_TOOLS, getPromptNames(request)), bodyParams.tools, 'prefix'); |
| 983 | 984 | |
| 985 | + if (/-reasoner/.test(request.body.model)) { | |
| 986 | + addReasoningContentToToolCalls(processedMessages); | |
| 987 | + } | |
| 988 | + | |
| 984 | 989 | const requestBody = { |
| 985 | 990 | 'messages': processedMessages, |
| 986 | 991 | 'model': request.body.model, |
| @@ -1209,3 +1209,22 @@ export function embedOpenRouterMedia(messages) { | ||
| 1209 | 1209 | } |
| 1210 | 1210 | } |
| 1211 | 1211 | } |
| 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 | +} | |