DeepSeek: Add tool calling for -chat model

c3dd3e246ede21c11b9b359a00e68735646c1d3e

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

4 files changed, +13 -5Showing whitespace changes
public/index.html+1 -1
@@ -1934,7 +1934,7 @@
1934 </span>1934 </span>
1935 </div>1935 </div>
1936 </div>1936 </div>
1937 <div class="range-block" data-source="openai,cohere,mistralai,custom,claude,openrouter,groq">1937 <div class="range-block" data-source="openai,cohere,mistralai,custom,claude,openrouter,groq,deepseek">
1938 <label for="openai_function_calling" class="checkbox_label flexWrap widthFreeExpand">1938 <label for="openai_function_calling" class="checkbox_label flexWrap widthFreeExpand">
1939 <input id="openai_function_calling" type="checkbox" />1939 <input id="openai_function_calling" type="checkbox" />
1940 <span data-i18n="Enable function calling">Enable function calling</span>1940 <span data-i18n="Enable function calling">Enable function calling</span>
public/scripts/openai.js+6 -4
@@ -1917,6 +1917,10 @@ async function sendOpenAIRequest(type, messages, signal) {
1917 'reasoning_effort': String(oai_settings.reasoning_effort),1917 'reasoning_effort': String(oai_settings.reasoning_effort),
1918 };1918 };
19191919
1920 if (!canMultiSwipe && ToolManager.canPerformToolCalls(type)) {
1921 await ToolManager.registerFunctionToolsOpenAI(generate_data);
1922 }
1923
1920 // Empty array will produce a validation error1924 // Empty array will produce a validation error
1921 if (!Array.isArray(generate_data.stop) || !generate_data.stop.length) {1925 if (!Array.isArray(generate_data.stop) || !generate_data.stop.length) {
1922 delete generate_data.stop;1926 delete generate_data.stop;
@@ -2040,6 +2044,8 @@ async function sendOpenAIRequest(type, messages, signal) {
2040 delete generate_data.top_logprobs;2044 delete generate_data.top_logprobs;
2041 delete generate_data.logprobs;2045 delete generate_data.logprobs;
2042 delete generate_data.logit_bias;2046 delete generate_data.logit_bias;
2047 delete generate_data.tools;
2048 delete generate_data.tool_choice;
2043 }2049 }
2044 }2050 }
20452051
@@ -2047,10 +2053,6 @@ async function sendOpenAIRequest(type, messages, signal) {
2047 generate_data['seed'] = oai_settings.seed;2053 generate_data['seed'] = oai_settings.seed;
2048 }2054 }
20492055
2050 if (!canMultiSwipe && ToolManager.canPerformToolCalls(type)) {
2051 await ToolManager.registerFunctionToolsOpenAI(generate_data);
2052 }
2053
2054 if (isOAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))) {2056 if (isOAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))) {
2055 generate_data.messages.forEach((msg) => {2057 generate_data.messages.forEach((msg) => {
2056 if (msg.role === 'system') {2058 if (msg.role === 'system') {
public/scripts/tool-calling.js+1 -0
@@ -563,6 +563,7 @@ export class ToolManager {
563 chat_completion_sources.OPENROUTER,563 chat_completion_sources.OPENROUTER,
564 chat_completion_sources.GROQ,564 chat_completion_sources.GROQ,
565 chat_completion_sources.COHERE,565 chat_completion_sources.COHERE,
566 chat_completion_sources.DEEPSEEK,
566 ];567 ];
567 return supportedSources.includes(oai_settings.chat_completion_source);568 return supportedSources.includes(oai_settings.chat_completion_source);
568 }569 }
src/endpoints/backends/chat-completions.js+5 -0
@@ -679,6 +679,11 @@ async function sendDeepSeekRequest(request, response) {
679 bodyParams['logprobs'] = true;679 bodyParams['logprobs'] = true;
680 }680 }
681681
682 if (Array.isArray(request.body.tools) && request.body.tools.length > 0) {
683 bodyParams['tools'] = request.body.tools;
684 bodyParams['tool_choice'] = request.body.tool_choice;
685 }
686
682 const postProcessType = String(request.body.model).endsWith('-reasoner') ? 'deepseek-reasoner' : 'deepseek';687 const postProcessType = String(request.body.model).endsWith('-reasoner') ? 'deepseek-reasoner' : 'deepseek';
683 const processedMessages = postProcessPrompt(request.body.messages, postProcessType, getPromptNames(request));688 const processedMessages = postProcessPrompt(request.body.messages, postProcessType, getPromptNames(request));
684689