From e1bad514b7e85a898b629ce3d2c52a7667b647af Mon Sep 17 00:00:00 2001 From: Peter Dave Hello <3691490+PeterDaveHello@users.noreply.github.com> Date: Wed, 23 Sep 2026 03:08:21 +0800 Subject: [PATCH] Add Anthropic Claude Opus 5.5 API support Register `claude-opus-5-5` as the default Opus API preset while keeping Claude Opus 5 available as a separate selectable model. Keep Opus 5.5 on its required adaptive thinking behavior by leaving the `thinking` field unset, and omit unsupported custom temperature values. Extend Claude request-shaping and temperature normalization coverage. References: - https://www.anthropic.com/claude-opus-5-5 - https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5 - https://platform.claude.com/docs/en/build-with-claude/preserved-thinking - https://platform.claude.com/docs/en/claude_api_primer --- src/_locales/en/main.json | 1 + src/config/index.mjs | 7 ++++++- src/services/apis/temperature-params.mjs | 1 + tests/unit/services/apis/claude-api.test.mjs | 1 + tests/unit/services/apis/temperature-params.test.mjs | 2 ++ 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/_locales/en/main.json b/src/_locales/en/main.json index 445148a56..303721fdf 100644 --- a/src/_locales/en/main.json +++ b/src/_locales/en/main.json @@ -205,6 +205,7 @@ "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 Opus 5.5)": "Anthropic (Claude Opus 5.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 6267ef67c..87309080f 100644 --- a/src/config/index.mjs +++ b/src/config/index.mjs @@ -97,6 +97,7 @@ export const claudeApiModelKeys = [ 'claudeOpus47Api', 'claudeOpus48Api', 'claudeOpus5Api', + 'claudeOpus55Api', 'claudeSonnet45Api', 'claudeSonnet46Api', 'claudeSonnet5Api', @@ -372,6 +373,10 @@ export const Models = { value: 'claude-opus-5', desc: 'Anthropic (Claude Opus 5)', }, + claudeOpus55Api: { + value: 'claude-opus-5-5', + desc: 'Anthropic (Claude Opus 5.5)', + }, claudeSonnet45Api: { value: 'claude-sonnet-4-5-20250929', desc: 'Anthropic (Claude Sonnet 4.5)', @@ -767,7 +772,7 @@ export const defaultApiModeIds = [ 'xaiGrok4_6', 'xaiGrok4_5', 'claudeFable51Api', - 'claudeOpus5Api', + 'claudeOpus55Api', 'claudeSonnet5Api', 'claudeHaiku45Api', 'googleGemini3_1Pro', diff --git a/src/services/apis/temperature-params.mjs b/src/services/apis/temperature-params.mjs index f586ab0fa..42357b992 100644 --- a/src/services/apis/temperature-params.mjs +++ b/src/services/apis/temperature-params.mjs @@ -3,6 +3,7 @@ const MODELS_WITHOUT_CUSTOM_TEMPERATURE = new Set([ 'claude-opus-4-8', 'claude-sonnet-5', 'claude-opus-5', + 'claude-opus-5-5', 'claude-fable-5', 'claude-fable-5-1', 'gpt-6-astra', diff --git a/tests/unit/services/apis/claude-api.test.mjs b/tests/unit/services/apis/claude-api.test.mjs index 790a962e6..c416dbc23 100644 --- a/tests/unit/services/apis/claude-api.test.mjs +++ b/tests/unit/services/apis/claude-api.test.mjs @@ -183,6 +183,7 @@ test('claude-api: omits temperature for models that reject custom sampling', asy ['claudeOpus47Api', 'claude-opus-4-7'], ['claudeOpus48Api', 'claude-opus-4-8'], ['claudeOpus5Api', 'claude-opus-5'], + ['claudeOpus55Api', 'claude-opus-5-5'], ['claudeSonnet5Api', 'claude-sonnet-5'], ]) { await t.test(modelName, async (t) => { diff --git a/tests/unit/services/apis/temperature-params.test.mjs b/tests/unit/services/apis/temperature-params.test.mjs index ff72cf33c..93a295e13 100644 --- a/tests/unit/services/apis/temperature-params.test.mjs +++ b/tests/unit/services/apis/temperature-params.test.mjs @@ -35,6 +35,8 @@ test('temperature overrides omit known Anthropic models across provider ID forma 'claude-opus-4-8-20260801', 'claude-sonnet-5', 'claude-opus-5', + 'claude-opus-5-5', + 'anthropic/claude-opus-5.5', 'claude-fable-5', 'claude-fable-5-1', 'anthropic/claude-fable-5.1',