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

This commit is contained in:
ashishch432
2026-04-19 18:17:40 +05:30
committed by GitHub
parent 4003251c2f
commit d1e719eb48
4 changed files with 19 additions and 6 deletions
+1
View File
@@ -3144,6 +3144,7 @@
<h4 data-i18n="Claude Model">Claude Model</h4>
<select id="model_claude_select">
<optgroup label="Versions">
<option value="claude-opus-4-7">claude-opus-4-7</option>
<option value="claude-opus-4-6">claude-opus-4-6</option>
<option value="claude-opus-4-5">claude-opus-4-5</option>
<option value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>
@@ -89,6 +89,7 @@
<option data-type="openai" value="o4-mini-2025-04-16">o4-mini-2025-04-16</option>
<option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option>
<option data-type="openai" value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>
<option data-type="anthropic" value="claude-opus-4-7">claude-opus-4-7</option>
<option data-type="anthropic" value="claude-opus-4-6">claude-opus-4-6</option>
<option data-type="anthropic" value="claude-opus-4-5">claude-opus-4-5</option>
<option data-type="anthropic" value="claude-opus-4-5-20251101">claude-opus-4-5-20251101</option>
+1 -1
View File
@@ -5435,7 +5435,7 @@ async function onModelChange() {
if (oai_settings.chat_completion_source == chat_completion_sources.CLAUDE) {
if (oai_settings.max_context_unlocked) {
$('#openai_max_context').attr('max', unlocked_max);
} else if (/^claude-(sonnet-4-5|sonnet-4-6|opus-4-6)/.test(value)) {
} else if (/^claude-(sonnet-4-5|sonnet-4-6|opus-4-6|opus-4-7)/.test(value)) {
$('#openai_max_context').attr('max', max_1mil);
} else if (/^claude-(3|opus|haiku|sonnet)/.test(value)) {
$('#openai_max_context').attr('max', max_200k);
+16 -5
View File
@@ -228,12 +228,13 @@ async function sendClaudeRequest(request, response) {
const useTools = Array.isArray(request.body.tools) && request.body.tools.length > 0;
const useSystemPrompt = Boolean(request.body.use_sysprompt);
const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, getPromptNames(request));
const useThinking = /^claude-(3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5|opus-4-6|sonnet-4-6)/.test(request.body.model);
const useWebSearch = /^claude-(3-5|3-7|opus-4|sonnet-4|haiku-4-5|opus-4-5|opus-4-6|sonnet-4-6)/.test(request.body.model) && Boolean(request.body.enable_web_search);
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);
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);
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);
const useVerbosity = /^claude-(opus-4-5|opus-4-6|sonnet-4-6)/.test(request.body.model);
const noPrefillModel = /^claude-(opus-4-6|sonnet-4-6)/.test(request.body.model);
const isAdaptiveModel = enableAdaptiveThinking && /^claude-(opus-4-6|sonnet-4-6)/.test(request.body.model);
const useVerbosity = /^claude-(opus-4-5|opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model);
const noPrefillModel = /^claude-(opus-4-6|sonnet-4-6|opus-4-7)/.test(request.body.model);
const isAdaptiveModel = /^claude-(opus-4-7)/.test(request.body.model) || (enableAdaptiveThinking && /^claude-(opus-4-6|sonnet-4-6)/.test(request.body.model));
const noSamplingModel = /^claude-(opus-4-7)/.test(request.body.model);
let fixThinkingPrefill = false;
// Add custom stop sequences
const stopSequences = [];
@@ -310,6 +311,12 @@ async function sendClaudeRequest(request, response) {
}
}
if (noSamplingModel) {
delete requestBody.temperature;
delete requestBody.top_p;
delete requestBody.top_k;
}
const reasoningEffort = request.body.reasoning_effort;
const budgetTokens = calculateClaudeBudgetTokens(requestBody.max_tokens, reasoningEffort, requestBody.stream, isAdaptiveModel);
@@ -317,6 +324,10 @@ async function sendClaudeRequest(request, response) {
if (useThinking && typeof budgetTokens === 'string') {
fixThinkingPrefill = true;
requestBody.thinking = { type: 'adaptive' };
const includeReasoning = Boolean(request.body.include_reasoning);
if (noSamplingModel && includeReasoning) {
requestBody.thinking.display = 'summarized';
}
requestBody.output_config ??= {};
requestBody.output_config.effort = budgetTokens;
// top_k is not allowed in adaptive mode