add option for claude-opus-4-6 (#5103) * add option for claude-opus-4-6 * fix: add claude-opus-4-6 to limited sampling and verbosity model lists * fix: disable assistant prefill for claude-opus-4-6 * refacor: merge fixthinkingPrefill and noPrefillModel * 1m context --------- Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>

39c8eb343c279b8e1293caff7c357caa3ba93b07

Lumi <github@lumify.cat>

Signed
4 files changed, +10 -7Showing whitespace changes
public/index.html+1 -0
@@ -3104,6 +3104,7 @@
3104 <h4 data-i18n="Claude Model">Claude Model</h4>3104 <h4 data-i18n="Claude Model">Claude Model</h4>
3105 <select id="model_claude_select">3105 <select id="model_claude_select">
3106 <optgroup label="Versions">3106 <optgroup label="Versions">
3107 <option value="claude-opus-4-6">claude-opus-4-6</option>
3107 <option value="claude-opus-4-5">claude-opus-4-5</option>3108 <option value="claude-opus-4-5">claude-opus-4-5</option>
3108 <option value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>3109 <option value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>
3109 <option value="claude-sonnet-4-5">claude-sonnet-4-5</option>3110 <option value="claude-sonnet-4-5">claude-sonnet-4-5</option>
public/scripts/extensions/caption/settings.html+1 -0
@@ -86,6 +86,7 @@
86 <option data-type="openai" value="o4-mini-2025-04-16">o4-mini-2025-04-16</option>86 <option data-type="openai" value="o4-mini-2025-04-16">o4-mini-2025-04-16</option>
87 <option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option>87 <option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option>
88 <option data-type="openai" value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>88 <option data-type="openai" value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>
89 <option data-type="anthropic" value="claude-opus-4-6">claude-opus-4-6</option>
89 <option data-type="anthropic" value="claude-opus-4-5">claude-opus-4-5</option>90 <option data-type="anthropic" value="claude-opus-4-5">claude-opus-4-5</option>
90 <option data-type="anthropic" value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>91 <option data-type="anthropic" value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>
91 <option data-type="anthropic" value="claude-sonnet-4-5">claude-sonnet-4-5</option>92 <option data-type="anthropic" value="claude-sonnet-4-5">claude-sonnet-4-5</option>
public/scripts/openai.js+1 -1
@@ -5285,7 +5285,7 @@ async function onModelChange() {
5285 if (oai_settings.max_context_unlocked) {5285 if (oai_settings.max_context_unlocked) {
5286 $('#openai_max_context').attr('max', unlocked_max);5286 $('#openai_max_context').attr('max', unlocked_max);
5287 }5287 }
5288 else if (value.startsWith('claude-sonnet-4-5')) {5288 else if (value.startsWith('claude-sonnet-4-5') || value.startsWith('claude-opus-4-6')) {
5289 $('#openai_max_context').attr('max', max_1mil);5289 $('#openai_max_context').attr('max', max_1mil);
5290 }5290 }
5291 else if (value == 'claude-2.1' || value.startsWith('claude-3') || value.startsWith('claude-opus') || value.startsWith('claude-haiku') || value.startsWith('claude-sonnet')) {5291 else if (value == 'claude-2.1' || value.startsWith('claude-3') || value.startsWith('claude-opus') || value.startsWith('claude-haiku') || value.startsWith('claude-sonnet')) {
src/endpoints/backends/chat-completions.js+7 -6
@@ -219,14 +219,15 @@ async function sendClaudeRequest(request, response) {
219 controller.abort();219 controller.abort();
220 });220 });
221 const additionalHeaders = {};221 const additionalHeaders = {};
222 const betaHeaders = ['output-128k-2025-02-19'];222 const betaHeaders = ['output-128k-2025-02-19', 'context-1m-2025-08-07'];
223 const useTools = Array.isArray(request.body.tools) && request.body.tools.length > 0;223 const useTools = Array.isArray(request.body.tools) && request.body.tools.length > 0;
224 const useSystemPrompt = Boolean(request.body.use_sysprompt);224 const useSystemPrompt = Boolean(request.body.use_sysprompt);
225 const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, getPromptNames(request));225 const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, getPromptNames(request));
226 const useThinking = /^claude-(3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5)/.test(request.body.model);226 const useThinking = /^claude-(3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5|opus-4-6)/.test(request.body.model);
227 const useWebSearch = /^claude-(3-5|3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5)/.test(request.body.model) && Boolean(request.body.enable_web_search);227 const useWebSearch = /^claude-(3-5|3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5|opus-4-6)/.test(request.body.model) && Boolean(request.body.enable_web_search);
228 const isLimitedSampling = /^claude-(opus-4-1|sonnet-4-5|haiku-4-5|opus-4-5)/.test(request.body.model);228 const isLimitedSampling = /^claude-(opus-4-1|sonnet-4-5|haiku-4-5|opus-4-5|opus-4-6)/.test(request.body.model);
229 const useVerbosity = /^claude-(opus-4-5)/.test(request.body.model);229 const useVerbosity = /^claude-(opus-4-5|opus-4-6)/.test(request.body.model);
230 const noPrefillModel = /^claude-(opus-4-6)/.test(request.body.model);
230 let fixThinkingPrefill = false;231 let fixThinkingPrefill = false;
231 // Add custom stop sequences232 // Add custom stop sequences
232 const stopSequences = [];233 const stopSequences = [];
@@ -327,7 +328,7 @@ async function sendClaudeRequest(request, response) {
327 delete requestBody.top_k;328 delete requestBody.top_k;
328 }329 }
329330
330 if (fixThinkingPrefill && convertedPrompt.messages.length && convertedPrompt.messages[convertedPrompt.messages.length - 1].role === 'assistant') {331 if ((fixThinkingPrefill || noPrefillModel) && convertedPrompt.messages.length && convertedPrompt.messages[convertedPrompt.messages.length - 1].role === 'assistant') {
331 convertedPrompt.messages[convertedPrompt.messages.length - 1].role = 'user';332 convertedPrompt.messages[convertedPrompt.messages.length - 1].role = 'user';
332 }333 }
333334