Skip to content

Commit 420d399

Browse files
github-actions[bot]Amber Agentclaude
authored
[Amber] Fix: [Amber] add opus-4.5 to the list of models available to ACP users. (#398)
## Automated Fix by Amber Agent This PR addresses issue #397 using the Amber background agent. ### Changes Summary - **Action Type:** auto-fix - **Commit:** af0fcd8 - **Triggered by:** Issue label/command ### Pre-merge Checklist - [ ] All linters pass - [ ] All tests pass - [ ] Changes follow project conventions (CLAUDE.md) - [ ] No scope creep beyond issue description ### Reviewer Notes This PR was automatically generated. Please review: 1. Code quality and adherence to standards 2. Test coverage for changes 3. No unintended side effects --- 🤖 Generated with [Amber Background Agent](https://github.com/ambient-code/platform/blob/main/docs/amber-automation.md) Closes #397 Co-authored-by: Amber Agent <[email protected]> Co-authored-by: Claude <[email protected]>
1 parent 69e0dc9 commit 420d399

File tree

4 files changed

+31
-11
lines changed

4 files changed

+31
-11
lines changed

components/frontend/src/app/projects/[name]/sessions/new/model-configuration.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@
77

88
const models = [
99
{ value: "claude-sonnet-4-5", label: "Claude Sonnet 4.5" },
10+
{ value: "claude-opus-4-5", label: "Claude Opus 4.5" },
1011
{ value: "claude-opus-4-1", label: "Claude Opus 4.1" },
1112
{ value: "claude-haiku-4-5", label: "Claude Haiku 4.5" },
1213
];

components/frontend/src/components/create-session-dialog.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { successToast, errorToast } from "@/hooks/use-toast";
4040

4141
const models = [
4242
{ value: "claude-sonnet-4-5", label: "Claude Sonnet 4.5" },
43+
{ value: "claude-opus-4-5", label: "Claude Opus 4.5" },
4344
{ value: "claude-opus-4-1", label: "Claude Opus 4.1" },
4445
{ value: "claude-haiku-4-5", label: "Claude Haiku 4.5" },
4546
];

components/runners/claude-code-runner/tests/test_model_mapping.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020
class TestMapToVertexModel:
2121
"""Test suite for _map_to_vertex_model method"""
2222

23+
def test_map_opus_4_5(self):
24+
"""Test mapping for Claude Opus 4.5"""
25+
adapter = ClaudeCodeAdapter()
26+
result = adapter._map_to_vertex_model('claude-opus-4-5')
27+
assert result == 'claude-opus-4-5@20251101'
28+
2329
def test_map_opus_4_1(self):
2430
"""Test mapping for Claude Opus 4.1"""
2531
adapter = ClaudeCodeAdapter()
@@ -86,14 +92,16 @@ def test_all_frontend_models_have_mapping(self):
8692
# These are the exact model values from the frontend dropdown
8793
frontend_models = [
8894
'claude-sonnet-4-5',
89-
'claude-haiku-4-5',
95+
'claude-opus-4-5',
9096
'claude-opus-4-1',
97+
'claude-haiku-4-5',
9198
]
9299

93100
expected_mappings = {
94101
'claude-sonnet-4-5': 'claude-sonnet-4-5@20250929',
95-
'claude-haiku-4-5': 'claude-haiku-4-5@20251001',
102+
'claude-opus-4-5': 'claude-opus-4-5@20251101',
96103
'claude-opus-4-1': 'claude-opus-4-1@20250805',
104+
'claude-haiku-4-5': 'claude-haiku-4-5@20251001',
97105
}
98106

99107
for model in frontend_models:
@@ -105,7 +113,7 @@ def test_mapping_includes_version_date(self):
105113
"""Test that all mapped models include version dates"""
106114
adapter = ClaudeCodeAdapter()
107115

108-
models = ['claude-opus-4-1', 'claude-sonnet-4-5', 'claude-haiku-4-5']
116+
models = ['claude-opus-4-5', 'claude-opus-4-1', 'claude-sonnet-4-5', 'claude-haiku-4-5']
109117

110118
for model in models:
111119
result = adapter._map_to_vertex_model(model)
@@ -152,6 +160,7 @@ def test_mapping_matches_available_vertex_models(self):
152160

153161
# Expected Vertex AI model ID format: model-name@YYYYMMDD
154162
models_to_test = [
163+
('claude-opus-4-5', 'claude-opus-4-5@20251101'),
155164
('claude-opus-4-1', 'claude-opus-4-1@20250805'),
156165
('claude-sonnet-4-5', 'claude-sonnet-4-5@20250929'),
157166
('claude-haiku-4-5', 'claude-haiku-4-5@20251001'),
@@ -169,8 +178,9 @@ def test_ui_to_vertex_round_trip(self):
169178
# Simulate user selecting from UI dropdown
170179
ui_selections = [
171180
'claude-sonnet-4-5', # User selects Sonnet 4.5
172-
'claude-haiku-4-5', # User selects Haiku 4.5
181+
'claude-opus-4-5', # User selects Opus 4.5
173182
'claude-opus-4-1', # User selects Opus 4.1
183+
'claude-haiku-4-5', # User selects Haiku 4.5
174184
]
175185

176186
for selection in ui_selections:
@@ -190,10 +200,15 @@ def test_end_to_end_vertex_mapping_flow(self):
190200

191201
# Simulate complete flow for each model
192202
test_scenarios = [
203+
{
204+
'ui_selection': 'claude-opus-4-5',
205+
'expected_vertex_id': 'claude-opus-4-5@20251101',
206+
'description': 'Latest Opus model',
207+
},
193208
{
194209
'ui_selection': 'claude-opus-4-1',
195210
'expected_vertex_id': 'claude-opus-4-1@20250805',
196-
'description': 'Most capable model',
211+
'description': 'Previous Opus model',
197212
},
198213
{
199214
'ui_selection': 'claude-sonnet-4-5',
@@ -231,10 +246,11 @@ def test_model_ordering_consistency(self):
231246
"""Test that model ordering is consistent between frontend and backend"""
232247
adapter = ClaudeCodeAdapter()
233248

234-
# Expected ordering: Opus (most capable) → Sonnet (balanced) → Haiku (fastest)
249+
# Expected ordering: Sonnet → Opus 4.5 → Opus 4.1 → Haiku (matches frontend dropdown)
235250
expected_order = [
236-
'claude-opus-4-1',
237251
'claude-sonnet-4-5',
252+
'claude-opus-4-5',
253+
'claude-opus-4-1',
238254
'claude-haiku-4-5',
239255
]
240256

@@ -243,7 +259,8 @@ def test_model_ordering_consistency(self):
243259
vertex_id = adapter._map_to_vertex_model(model)
244260
assert '@' in vertex_id, f"Model {model} should map to valid Vertex AI ID"
245261

246-
# Verify ordering matches capability hierarchy
247-
assert expected_order[0] == 'claude-opus-4-1' # Most capable first
248-
assert expected_order[1] == 'claude-sonnet-4-5' # Balanced second
249-
assert expected_order[2] == 'claude-haiku-4-5' # Fastest third
262+
# Verify ordering matches frontend dropdown
263+
assert expected_order[0] == 'claude-sonnet-4-5' # Balanced (default)
264+
assert expected_order[1] == 'claude-opus-4-5' # Latest Opus
265+
assert expected_order[2] == 'claude-opus-4-1' # Previous Opus
266+
assert expected_order[3] == 'claude-haiku-4-5' # Fastest

components/runners/claude-code-runner/wrapper.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ def _map_to_vertex_model(self, model: str) -> str:
748748
# Model mapping from Anthropic API to Vertex AI
749749
# Reference: https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-claude
750750
model_map = {
751+
'claude-opus-4-5': 'claude-opus-4-5@20251101',
751752
'claude-opus-4-1': 'claude-opus-4-1@20250805',
752753
'claude-sonnet-4-5': 'claude-sonnet-4-5@20250929',
753754
'claude-haiku-4-5': 'claude-haiku-4-5@20251001',

0 commit comments

Comments
 (0)