Merge branch 'staging' into hidden-reasoning-tracking

This commit is contained in:
Cohee
2025-02-11 23:45:13 +02:00
6 changed files with 30 additions and 7 deletions

View File

@ -1934,7 +1934,7 @@
</span> </span>
</div> </div>
</div> </div>
<div class="range-block" data-source="openai,cohere,mistralai,custom,claude,openrouter,groq"> <div class="range-block" data-source="openai,cohere,mistralai,custom,claude,openrouter,groq,deepseek">
<label for="openai_function_calling" class="checkbox_label flexWrap widthFreeExpand"> <label for="openai_function_calling" class="checkbox_label flexWrap widthFreeExpand">
<input id="openai_function_calling" type="checkbox" /> <input id="openai_function_calling" type="checkbox" />
<span data-i18n="Enable function calling">Enable function calling</span> <span data-i18n="Enable function calling">Enable function calling</span>

View File

@ -269,7 +269,7 @@ import { initSettingsSearch } from './scripts/setting-search.js';
import { initBulkEdit } from './scripts/bulk-edit.js'; import { initBulkEdit } from './scripts/bulk-edit.js';
import { deriveTemplatesFromChatTemplate } from './scripts/chat-templates.js'; import { deriveTemplatesFromChatTemplate } from './scripts/chat-templates.js';
import { getContext } from './scripts/st-context.js'; import { getContext } from './scripts/st-context.js';
import { extractReasoningFromData, initReasoning, PromptReasoning, ReasoningHandler, updateReasoningUI } from './scripts/reasoning.js'; import { extractReasoningFromData, initReasoning, PromptReasoning, ReasoningHandler, removeReasoningFromString, updateReasoningUI } from './scripts/reasoning.js';
// API OBJECT FOR EXTERNAL WIRING // API OBJECT FOR EXTERNAL WIRING
globalThis.SillyTavern = { globalThis.SillyTavern = {
@ -2785,7 +2785,8 @@ export async function generateQuietPrompt(quiet_prompt, quietToLoud, skipWIAN, q
TempResponseLength.save(main_api, responseLength); TempResponseLength.save(main_api, responseLength);
eventHook = TempResponseLength.setupEventHook(main_api); eventHook = TempResponseLength.setupEventHook(main_api);
} }
return await Generate('quiet', options); const result = await Generate('quiet', options);
return removeReasoningFromString(result);
} finally { } finally {
if (responseLengthCustomized && TempResponseLength.isCustomized()) { if (responseLengthCustomized && TempResponseLength.isCustomized()) {
TempResponseLength.restore(main_api); TempResponseLength.restore(main_api);

View File

@ -1916,6 +1916,10 @@ async function sendOpenAIRequest(type, messages, signal) {
'reasoning_effort': String(oai_settings.reasoning_effort), 'reasoning_effort': String(oai_settings.reasoning_effort),
}; };
if (!canMultiSwipe && ToolManager.canPerformToolCalls(type)) {
await ToolManager.registerFunctionToolsOpenAI(generate_data);
}
// Empty array will produce a validation error // Empty array will produce a validation error
if (!Array.isArray(generate_data.stop) || !generate_data.stop.length) { if (!Array.isArray(generate_data.stop) || !generate_data.stop.length) {
delete generate_data.stop; delete generate_data.stop;
@ -2039,6 +2043,8 @@ async function sendOpenAIRequest(type, messages, signal) {
delete generate_data.top_logprobs; delete generate_data.top_logprobs;
delete generate_data.logprobs; delete generate_data.logprobs;
delete generate_data.logit_bias; delete generate_data.logit_bias;
delete generate_data.tools;
delete generate_data.tool_choice;
} }
} }
@ -2046,10 +2052,6 @@ async function sendOpenAIRequest(type, messages, signal) {
generate_data['seed'] = oai_settings.seed; generate_data['seed'] = oai_settings.seed;
} }
if (!canMultiSwipe && ToolManager.canPerformToolCalls(type)) {
await ToolManager.registerFunctionToolsOpenAI(generate_data);
}
if (isOAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))) { if (isOAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))) {
generate_data.messages.forEach((msg) => { generate_data.messages.forEach((msg) => {
if (msg.role === 'system') { if (msg.role === 'system') {

View File

@ -767,6 +767,20 @@ function setReasoningEventHandlers() {
}); });
} }
/**
* Removes reasoning from a string if auto-parsing is enabled.
* @param {string} str Input string
* @returns {string} Output string
*/
export function removeReasoningFromString(str) {
if (!power_user.reasoning.auto_parse) {
return str;
}
const parsedReasoning = parseReasoningFromString(str);
return parsedReasoning?.content ?? str;
}
/** /**
* Parses reasoning from a string using the power user reasoning settings. * Parses reasoning from a string using the power user reasoning settings.
* @typedef {Object} ParsedReasoning * @typedef {Object} ParsedReasoning

View File

@ -563,6 +563,7 @@ export class ToolManager {
chat_completion_sources.OPENROUTER, chat_completion_sources.OPENROUTER,
chat_completion_sources.GROQ, chat_completion_sources.GROQ,
chat_completion_sources.COHERE, chat_completion_sources.COHERE,
chat_completion_sources.DEEPSEEK,
]; ];
return supportedSources.includes(oai_settings.chat_completion_source); return supportedSources.includes(oai_settings.chat_completion_source);
} }

View File

@ -672,6 +672,11 @@ async function sendDeepSeekRequest(request, response) {
bodyParams['logprobs'] = true; bodyParams['logprobs'] = true;
} }
if (Array.isArray(request.body.tools) && request.body.tools.length > 0) {
bodyParams['tools'] = request.body.tools;
bodyParams['tool_choice'] = request.body.tool_choice;
}
const postProcessType = String(request.body.model).endsWith('-reasoner') ? 'deepseek-reasoner' : 'deepseek'; const postProcessType = String(request.body.model).endsWith('-reasoner') ? 'deepseek-reasoner' : 'deepseek';
const processedMessages = postProcessPrompt(request.body.messages, postProcessType, getPromptNames(request)); const processedMessages = postProcessPrompt(request.body.messages, postProcessType, getPromptNames(request));