add claude-opus-4-7 (#5465)

d1e719eb48c5b88162e1cfc3e8d7278db9373372

ashishch432 <55024632+ashishch432@users.noreply.github.com>

Signed
4 files changed, +19 -6Ignore whitespace
public/index.html+1 -0
@@ -3144,6 +3144,7 @@
31443144 <h4 data-i18n="Claude Model">Claude Model</h4>
31453145 <select id="model_claude_select">
31463146 <optgroup label="Versions">
3147+ <option value="claude-opus-4-7">claude-opus-4-7</option>
31473148 <option value="claude-opus-4-6">claude-opus-4-6</option>
31483149 <option value="claude-opus-4-5">claude-opus-4-5</option>
31493150 <option value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>
public/scripts/extensions/caption/settings.html+1 -0
@@ -89,6 +89,7 @@
8989 <option data-type="openai" value="o4-mini-2025-04-16">o4-mini-2025-04-16</option>
9090 <option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option>
9191 <option data-type="openai" value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>
92+ <option data-type="anthropic" value="claude-opus-4-7">claude-opus-4-7</option>
9293 <option data-type="anthropic" value="claude-opus-4-6">claude-opus-4-6</option>
9394 <option data-type="anthropic" value="claude-opus-4-5">claude-opus-4-5</option>
9495 <option data-type="anthropic" value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>
public/scripts/openai.js+1 -1
@@ -5435,7 +5435,7 @@ async function onModelChange() {
54355435 if (oai_settings.chat_completion_source == chat_completion_sources.CLAUDE) {
54365436 if (oai_settings.max_context_unlocked) {
54375437 $('#openai_max_context').attr('max', unlocked_max);
54385438 } else if (/^claude-(sonnet-4-5|sonnet-4-6|opus-4-6|opus-4-7)/.test(value)) {
54395439 $('#openai_max_context').attr('max', max_1mil);
54405440 } else if (/^claude-(3|opus|haiku|sonnet)/.test(value)) {
54415441 $('#openai_max_context').attr('max', max_200k);
src/endpoints/backends/chat-completions.js+16 -5
@@ -228,12 +228,13 @@ async function sendClaudeRequest(request, response) {
228228 const useTools = Array.isArray(request.body.tools) && request.body.tools.length > 0;
229229 const useSystemPrompt = Boolean(request.body.use_sysprompt);
230230 const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, getPromptNames(request));
231231 const useThinking = /^claude-(3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5|opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model);
232232 const useWebSearch = /^claude-(3-5|3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5|opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model) && Boolean(request.body.enable_web_search);
233233 const isLimitedSampling = /^claude-(opus-4-1|sonnet-4-5|haiku-4-5|opus-4-5|opus-4-6|sonnet-4-6)/.test(request.body.model);
234234 const useVerbosity = /^claude-(opus-4-5|opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model);
235235 const noPrefillModel = /^claude-(opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model);
236236 const isAdaptiveModel = /^claude-(opus-4-7)/.test(request.body.model) || (enableAdaptiveThinking && /^claude-(opus-4-6|sonnet-4-6)/.test(request.body.model));
237+ const noSamplingModel = /^claude-(opus-4-7)/.test(request.body.model);
237238 let fixThinkingPrefill = false;
238239 // Add custom stop sequences
239240 const stopSequences = [];
@@ -310,6 +311,12 @@ async function sendClaudeRequest(request, response) {
310311 }
311312 }
312313
314+ if (noSamplingModel) {
315+ delete requestBody.temperature;
316+ delete requestBody.top_p;
317+ delete requestBody.top_k;
318+ }
319+
313320 const reasoningEffort = request.body.reasoning_effort;
314321 const budgetTokens = calculateClaudeBudgetTokens(requestBody.max_tokens, reasoningEffort, requestBody.stream, isAdaptiveModel);
315322
@@ -317,6 +324,10 @@ async function sendClaudeRequest(request, response) {
317324 if (useThinking && typeof budgetTokens === 'string') {
318325 fixThinkingPrefill = true;
319326 requestBody.thinking = { type: 'adaptive' };
327+ const includeReasoning = Boolean(request.body.include_reasoning);
328+ if (noSamplingModel && includeReasoning) {
329+ requestBody.thinking.display = 'summarized';
330+ }
320331 requestBody.output_config ??= {};
321332 requestBody.output_config.effort = budgetTokens;
322333 // top_k is not allowed in adaptive mode