fix(ui): surface Claude Opus 4.7 in Claude picker

This commit is contained in:
Tam Nhu Tran
2026-05-05 11:38:00 -04:00
parent fcfd2d279e
commit 58af9cd501
3 changed files with 33 additions and 2 deletions
+13 -1
View File
@@ -628,10 +628,22 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
displayName: 'Claude (Anthropic)',
defaultModel: 'claude-sonnet-4-6',
models: [
{
id: 'claude-opus-4-7',
name: 'Claude Opus 4.7',
description: 'Latest flagship model',
extendedContext: true,
presetMapping: {
default: 'claude-opus-4-7',
opus: 'claude-opus-4-7',
sonnet: 'claude-sonnet-4-6',
haiku: 'claude-haiku-4-5-20251001',
},
},
{
id: 'claude-opus-4-6',
name: 'Claude Opus 4.6',
description: 'Latest flagship model',
description: 'Previous flagship model',
extendedContext: true,
presetMapping: {
default: 'claude-opus-4-6',
@@ -70,6 +70,24 @@ describe('FlexibleModelSelector', () => {
expect(screen.queryByText(/All Models \(/i)).not.toBeInTheDocument();
});
it('surfaces Claude Opus 4.7 in the curated Claude picker', async () => {
render(
<FlexibleModelSelector
label="Primary model"
value={undefined}
onChange={vi.fn()}
catalog={MODEL_CATALOGS.claude}
allModels={[]}
/>
);
await userEvent.click(screen.getByRole('button', { name: /select model/i }));
expect(screen.getByRole('option', { name: /claude-opus-4-7/i })).toBeInTheDocument();
expect(screen.getByRole('option', { name: /claude-opus-4-6/i })).toBeInTheDocument();
expect(screen.getByRole('option', { name: /claude-sonnet-4-6/i })).toBeInTheDocument();
});
it('preserves a filtered legacy value under the current-value fallback group', async () => {
render(
<FlexibleModelSelector
+2 -1
View File
@@ -16,10 +16,11 @@ describe('claude preset utils', () => {
vi.restoreAllMocks();
});
it('keeps the claude catalog default on Sonnet 4.6', () => {
it('keeps the claude catalog default on Sonnet 4.6 while exposing Opus 4.7', () => {
const claudeCatalog = MODEL_CATALOGS.claude;
expect(claudeCatalog.defaultModel).toBe('claude-sonnet-4-6');
expect(claudeCatalog.models.map((model) => model.id)).toContain('claude-opus-4-7');
expect(claudeCatalog.models.map((model) => model.id)).toContain('claude-sonnet-4-6');
});