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>
Signed| @@ -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> |
| @@ -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> |
| @@ -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')) { |
| @@ -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 sequences | 232 | // 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 | } |
| 329 | 330 | ||
| 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 | } |
| 333 | 334 | ||