diff --git a/src/endpoints/backends/chat-completions.js b/src/endpoints/backends/chat-completions.js index 71e031c2c..581ad7eff 100644 --- a/src/endpoints/backends/chat-completions.js +++ b/src/endpoints/backends/chat-completions.js @@ -2296,6 +2296,10 @@ router.post('/generate', async function (request, response) { if (isCacheableGemini && enableGeminiSystemPromptCache) { cachingSystemPromptForOpenRouter(request.body.messages); } + + if (request.body.model.includes('moonshot') && !request.body.json_schema) { + addAssistantPrefix(request.body.messages, [], 'partial'); + } } if (isGemini) { diff --git a/src/prompt-converters.js b/src/prompt-converters.js index 34ae3b388..ce019b607 100644 --- a/src/prompt-converters.js +++ b/src/prompt-converters.js @@ -59,20 +59,37 @@ export function getPromptNames(request) { /** * Adds an assistant prefix to the last message. - * @param {any[]} prompt Prompt messages array + * @param {any[]} messages Prompt messages array * @param {any[]} tools Array of tool definitions * @param {string} property The property to set the prefix on * @returns {any[]} Transformed messages array */ -export function addAssistantPrefix(prompt, tools, property) { - if (!prompt.length) { - return prompt; - } - const hasAnyTools = (Array.isArray(tools) && tools.length > 0) || prompt.some(x => x.role === 'tool'); - if (!hasAnyTools && prompt[prompt.length - 1].role === 'assistant') { - prompt[prompt.length - 1][property] = true; +export function addAssistantPrefix(messages, tools, property) { + const message = messages.at(-1); + + if ( + message != null && + message.role === 'assistant' && + messages.some(m => (m.role === 'tool')) === false && + (Array.isArray(tools) && tools.length > 0) === false + ) { + if ( + property === 'partial' && + typeof message.content === 'string' + ) { + const regex = /^\s*(.*?)(<\/think>|$)/s; + const match = message.content.match(regex); + + if (match) { + message.reasoning_content = match[1].trim(); + message.content = message.content.replace(regex, '').trimStart(); + } + } + + message[property] = true; } - return prompt; + + return messages; } /**