From 37aabfd4095018e6e1b755c6cba62d3c1f9348ee Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sun, 26 Jul 2026 03:31:25 +0800 Subject: [PATCH] Add Anthropic Claude Opus 5 API support Register `claude-opus-5` as the default Opus API preset while keeping Claude Opus 4.8 available as a separate selectable model. Let Opus 5 use its default adaptive thinking behavior and omit the unsupported custom temperature parameter. Add request-shaping regression coverage. References: - https://www.anthropic.com/claude-opus-5-system-card - https://www.anthropic.com/news/claude-opus-5 - https://platform.claude.com/docs/en/about-claude/models/overview - https://platform.claude.com/docs/en/about-claude/models/whats-new-opus-5 --- src/_locales/en/main.json | 1 + src/config/index.mjs | 7 ++++++- src/services/apis/claude-api.mjs | 7 ++++++- tests/unit/services/apis/claude-api.test.mjs | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/_locales/en/main.json b/src/_locales/en/main.json index 629bc7a15..5f1428218 100644 --- a/src/_locales/en/main.json +++ b/src/_locales/en/main.json @@ -195,6 +195,7 @@ "Anthropic (Claude Opus 4.5)": "Anthropic (Claude Opus 4.5)", "Anthropic (Claude Opus 4.6)": "Anthropic (Claude Opus 4.6)", "Anthropic (Claude Opus 4.8)": "Anthropic (Claude Opus 4.8)", + "Anthropic (Claude Opus 5)": "Anthropic (Claude Opus 5)", "Anthropic (Claude Sonnet 4)": "Anthropic (Claude Sonnet 4)", "Anthropic (Claude Sonnet 4.5)": "Anthropic (Claude Sonnet 4.5)", "Anthropic (Claude Haiku 4.5)": "Anthropic (Claude Haiku 4.5)", diff --git a/src/config/index.mjs b/src/config/index.mjs index 22b64df31..c4659af0b 100644 --- a/src/config/index.mjs +++ b/src/config/index.mjs @@ -91,6 +91,7 @@ export const claudeApiModelKeys = [ 'claudeOpus46Api', 'claudeOpus47Api', 'claudeOpus48Api', + 'claudeOpus5Api', 'claudeSonnet45Api', 'claudeSonnet46Api', 'claudeSonnet5Api', @@ -364,6 +365,10 @@ export const Models = { value: 'claude-opus-4-8', desc: 'Anthropic (Claude Opus 4.8)', }, + claudeOpus5Api: { + value: 'claude-opus-5', + desc: 'Anthropic (Claude Opus 5)', + }, claudeSonnet45Api: { value: 'claude-sonnet-4-5-20250929', desc: 'Anthropic (Claude Sonnet 4.5)', @@ -750,7 +755,7 @@ export const defaultApiModeIds = [ 'chatgptApi5_6Terra', 'chatgptApi5_6Luna', 'xaiGrok4_5', - 'claudeOpus48Api', + 'claudeOpus5Api', 'claudeSonnet5Api', 'claudeHaiku45Api', 'googleGemini3_1Pro', diff --git a/src/services/apis/claude-api.mjs b/src/services/apis/claude-api.mjs index 341a4dd9d..0f15680df 100644 --- a/src/services/apis/claude-api.mjs +++ b/src/services/apis/claude-api.mjs @@ -6,7 +6,12 @@ import { getConversationPairs } from '../../utils/get-conversation-pairs.mjs' import { getModelValue } from '../../utils/model-name-convert.mjs' function shouldOmitTemperature(model) { - return model === 'claude-opus-4-7' || model === 'claude-opus-4-8' || model === 'claude-sonnet-5' + return ( + model === 'claude-opus-4-7' || + model === 'claude-opus-4-8' || + model === 'claude-sonnet-5' || + model === 'claude-opus-5' + ) } function shouldDisableDefaultThinking(model) { diff --git a/tests/unit/services/apis/claude-api.test.mjs b/tests/unit/services/apis/claude-api.test.mjs index 64684e97d..88e44ad26 100644 --- a/tests/unit/services/apis/claude-api.test.mjs +++ b/tests/unit/services/apis/claude-api.test.mjs @@ -125,6 +125,7 @@ test('claude-api: omits temperature for models that reject custom sampling', asy for (const [modelName, model] of [ ['claudeOpus47Api', 'claude-opus-4-7'], ['claudeOpus48Api', 'claude-opus-4-8'], + ['claudeOpus5Api', 'claude-opus-5'], ['claudeSonnet5Api', 'claude-sonnet-5'], ]) { await t.test(modelName, async (t) => {