Merge pull request #3548 from SillyTavern/sonnet-3.7 Sonnet 3.7

db148d51427ddc478dea373c21a1d203966961df

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

Signed
4 files changed, +14 -2Ignore whitespace
public/index.html+2 -0
@@ -2915,6 +2915,8 @@
2915 <h4 data-i18n="Claude Model">Claude Model</h4>2915 <h4 data-i18n="Claude Model">Claude Model</h4>
2916 <select id="model_claude_select">2916 <select id="model_claude_select">
2917 <optgroup label="Versions">2917 <optgroup label="Versions">
2918 <option value="claude-3-7-sonnet-latest">claude-3-7-sonnet-latest</option>
2919 <option value="claude-3-7-sonnet-20250219">claude-3-7-sonnet-20250219</option>
2918 <option value="claude-3-5-sonnet-latest">claude-3-5-sonnet-latest</option>2920 <option value="claude-3-5-sonnet-latest">claude-3-5-sonnet-latest</option>
2919 <option value="claude-3-5-sonnet-20241022">claude-3-5-sonnet-20241022</option>2921 <option value="claude-3-5-sonnet-20241022">claude-3-5-sonnet-20241022</option>
2920 <option value="claude-3-5-sonnet-20240620">claude-3-5-sonnet-20240620</option>2922 <option value="claude-3-5-sonnet-20240620">claude-3-5-sonnet-20240620</option>
public/scripts/extensions/caption/settings.html+4 -0
@@ -45,6 +45,10 @@
45 <option data-type="openai" value="gpt-4o">gpt-4o</option>45 <option data-type="openai" value="gpt-4o">gpt-4o</option>
46 <option data-type="openai" value="gpt-4o-mini">gpt-4o-mini</option>46 <option data-type="openai" value="gpt-4o-mini">gpt-4o-mini</option>
47 <option data-type="openai" value="chatgpt-4o-latest">chatgpt-4o-latest</option>47 <option data-type="openai" value="chatgpt-4o-latest">chatgpt-4o-latest</option>
48 <option data-type="openai" value="o1">o1</option>
49 <option data-type="openai" value="o1-2024-12-17">o1-2024-12-17</option>
50 <option data-type="anthropic" value="claude-3-7-sonnet-latest">claude-3-7-sonnet-latest</option>
51 <option data-type="anthropic" value="claude-3-7-sonnet-20250219">claude-3-7-sonnet-20250219</option>
48 <option data-type="anthropic" value="claude-3-5-sonnet-latest">claude-3-5-sonnet-latest</option>52 <option data-type="anthropic" value="claude-3-5-sonnet-latest">claude-3-5-sonnet-latest</option>
49 <option data-type="anthropic" value="claude-3-5-sonnet-20241022">claude-3-5-sonnet-20241022</option>53 <option data-type="anthropic" value="claude-3-5-sonnet-20241022">claude-3-5-sonnet-20241022</option>
50 <option data-type="anthropic" value="claude-3-5-sonnet-20240620">claude-3-5-sonnet-20240620</option>54 <option data-type="anthropic" value="claude-3-5-sonnet-20240620">claude-3-5-sonnet-20240620</option>
public/scripts/openai.js+1 -0
@@ -4981,6 +4981,7 @@ export function isImageInliningSupported() {
4981 'gemini-1.5-pro-exp-0827',4981 'gemini-1.5-pro-exp-0827',
4982 'claude-3',4982 'claude-3',
4983 'claude-3-5',4983 'claude-3-5',
4984 'claude-3-7',
4984 'gpt-4-turbo',4985 'gpt-4-turbo',
4985 'gpt-4o',4986 'gpt-4o',
4986 'gpt-4o-mini',4987 'gpt-4o-mini',
src/endpoints/backends/chat-completions.js+7 -2
@@ -125,6 +125,7 @@ async function sendClaudeRequest(request, response) {
125 controller.abort();125 controller.abort();
126 });126 });
127 const additionalHeaders = {};127 const additionalHeaders = {};
128 const betaHeaders = ['output-128k-2025-02-19'];
128 const useTools = request.body.model.startsWith('claude-3') && Array.isArray(request.body.tools) && request.body.tools.length > 0;129 const useTools = request.body.model.startsWith('claude-3') && Array.isArray(request.body.tools) && request.body.tools.length > 0;
129 const useSystemPrompt = (request.body.model.startsWith('claude-2') || request.body.model.startsWith('claude-3')) && request.body.claude_use_sysprompt;130 const useSystemPrompt = (request.body.model.startsWith('claude-2') || request.body.model.startsWith('claude-3')) && request.body.claude_use_sysprompt;
130 const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, getPromptNames(request));131 const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, getPromptNames(request));
@@ -155,7 +156,7 @@ async function sendClaudeRequest(request, response) {
155 delete requestBody.system;156 delete requestBody.system;
156 }157 }
157 if (useTools) {158 if (useTools) {
158 additionalHeaders['anthropic-beta'] = 'tools-2024-05-16';159 betaHeaders.push('tools-2024-05-16');
159 requestBody.tool_choice = { type: request.body.tool_choice };160 requestBody.tool_choice = { type: request.body.tool_choice };
160 requestBody.tools = request.body.tools161 requestBody.tools = request.body.tools
161 .filter(tool => tool.type === 'function')162 .filter(tool => tool.type === 'function')
@@ -176,7 +177,11 @@ async function sendClaudeRequest(request, response) {
176 }177 }
177178
178 if (enableSystemPromptCache || cachingAtDepth !== -1) {179 if (enableSystemPromptCache || cachingAtDepth !== -1) {
179 additionalHeaders['anthropic-beta'] = 'prompt-caching-2024-07-31';180 betaHeaders.push('prompt-caching-2024-07-31');
181 }
182
183 if (betaHeaders.length) {
184 additionalHeaders['anthropic-beta'] = betaHeaders.join(',');
180 }185 }
181186
182 console.debug('Claude request:', requestBody);187 console.debug('Claude request:', requestBody);