| @@ -3144,6 +3144,7 @@ | ||
| 3144 | 3144 | <h4 data-i18n="Claude Model">Claude Model</h4> |
| 3145 | 3145 | <select id="model_claude_select"> |
| 3146 | 3146 | <optgroup label="Versions"> |
| 3147 | + <option value="claude-opus-4-7">claude-opus-4-7</option> | |
| 3147 | 3148 | <option value="claude-opus-4-6">claude-opus-4-6</option> |
| 3148 | 3149 | <option value="claude-opus-4-5">claude-opus-4-5</option> |
| 3149 | 3150 | <option value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option> |
| @@ -89,6 +89,7 @@ | ||
| 89 | 89 | <option data-type="openai" value="o4-mini-2025-04-16">o4-mini-2025-04-16</option> |
| 90 | 90 | <option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option> |
| 91 | 91 | <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> | |
| 92 | 93 | <option data-type="anthropic" value="claude-opus-4-6">claude-opus-4-6</option> |
| 93 | 94 | <option data-type="anthropic" value="claude-opus-4-5">claude-opus-4-5</option> |
| 94 | 95 | <option data-type="anthropic" value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option> |
| @@ -5435,7 +5435,7 @@ async function onModelChange() { | ||
| 5435 | 5435 | if (oai_settings.chat_completion_source == chat_completion_sources.CLAUDE) { |
| 5436 | 5436 | if (oai_settings.max_context_unlocked) { |
| 5437 | 5437 | $('#openai_max_context').attr('max', unlocked_max); |
| 5438 | 5438 | } else if (/^claude-(sonnet-4-5|sonnet-4-6|opus-4-6|opus-4-7)/.test(value)) { |
| 5439 | 5439 | $('#openai_max_context').attr('max', max_1mil); |
| 5440 | 5440 | } else if (/^claude-(3|opus|haiku|sonnet)/.test(value)) { |
| 5441 | 5441 | $('#openai_max_context').attr('max', max_200k); |
| @@ -228,12 +228,13 @@ async function sendClaudeRequest(request, response) { | ||
| 228 | 228 | const useTools = Array.isArray(request.body.tools) && request.body.tools.length > 0; |
| 229 | 229 | const useSystemPrompt = Boolean(request.body.use_sysprompt); |
| 230 | 230 | const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, getPromptNames(request)); |
| 231 | 231 | 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); |
| 232 | 232 | 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); |
| 233 | 233 | 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); |
| 234 | 234 | const useVerbosity = /^claude-(opus-4-5|opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model); |
| 235 | 235 | const noPrefillModel = /^claude-(opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model); |
| 236 | 236 | 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); | |
| 237 | 238 | let fixThinkingPrefill = false; |
| 238 | 239 | // Add custom stop sequences |
| 239 | 240 | const stopSequences = []; |
| @@ -310,6 +311,12 @@ async function sendClaudeRequest(request, response) { | ||
| 310 | 311 | } |
| 311 | 312 | } |
| 312 | 313 | |
| 314 | + if (noSamplingModel) { | |
| 315 | + delete requestBody.temperature; | |
| 316 | + delete requestBody.top_p; | |
| 317 | + delete requestBody.top_k; | |
| 318 | + } | |
| 319 | + | |
| 313 | 320 | const reasoningEffort = request.body.reasoning_effort; |
| 314 | 321 | const budgetTokens = calculateClaudeBudgetTokens(requestBody.max_tokens, reasoningEffort, requestBody.stream, isAdaptiveModel); |
| 315 | 322 | |
| @@ -317,6 +324,10 @@ async function sendClaudeRequest(request, response) { | ||
| 317 | 324 | if (useThinking && typeof budgetTokens === 'string') { |
| 318 | 325 | fixThinkingPrefill = true; |
| 319 | 326 | requestBody.thinking = { type: 'adaptive' }; |
| 327 | + const includeReasoning = Boolean(request.body.include_reasoning); | |
| 328 | + if (noSamplingModel && includeReasoning) { | |
| 329 | + requestBody.thinking.display = 'summarized'; | |
| 330 | + } | |
| 320 | 331 | requestBody.output_config ??= {}; |
| 321 | 332 | requestBody.output_config.effort = budgetTokens; |
| 322 | 333 | // top_k is not allowed in adaptive mode |