feat(catalog): add Claude Opus 4.8 to Anthropic model registry

Register `claude-opus-4-8` in the cliproxy model catalog, web-server
pricing table, and UI catalog as an additive entry next to 4.7. Defaults
are unchanged (claude provider stays on sonnet-4-6); users opt into 4.8
explicitly via ANTHROPIC_MODEL or the dashboard.

Configuration mirrors 4.7:
- adaptive thinking levels (low through max), max distinct from xhigh
- extendedContext (1M) available
- nativeImageInput
- pricing $5/$25 in/out, $6.25/$0.5 cache

Built [OnSteroids](https://onsteroids.ai)
This commit is contained in:
Sergey Galuza committed 2026-05-30 17:16:27 +02:00
1 parent 5b8923c85e
commit 357ce8b07a
7 files changed
+92 -17

No files matched your search

+14 -2
View File
@@ -630,10 +630,22 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
displayName: 'Claude (Anthropic)',
defaultModel: 'claude-sonnet-4-6',
models: [
{
id: 'claude-opus-4-8',
name: 'Claude Opus 4.8',
description: 'Latest flagship model',
extendedContext: true,
presetMapping: {
default: 'claude-opus-4-8',
opus: 'claude-opus-4-8',
sonnet: 'claude-sonnet-4-6',
haiku: 'claude-haiku-4-5-20251001',
},
},
{
id: 'claude-opus-4-7',
name: 'Claude Opus 4.7',
description: 'Latest flagship model',
description: 'Previous flagship model',
extendedContext: true,
presetMapping: {
default: 'claude-opus-4-7',
@@ -645,7 +657,7 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
{
id: 'claude-opus-4-6',
name: 'Claude Opus 4.6',
description: 'Previous flagship model',
description: 'Older flagship model',
extendedContext: true,
presetMapping: {
default: 'claude-opus-4-6',
+5 -3
View File
@@ -16,12 +16,14 @@ describe('claude preset utils', () => {
vi.restoreAllMocks();
});
it('keeps the claude catalog default on Sonnet 4.6 while exposing Opus 4.7', () => {
it('keeps the claude catalog default on Sonnet 4.6 while exposing Opus 4.7 and 4.8', () => {
const claudeCatalog = MODEL_CATALOGS.claude;
const ids = claudeCatalog.models.map((model) => model.id);
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');
expect(ids).toContain('claude-opus-4-8');
expect(ids).toContain('claude-opus-4-7');
expect(ids).toContain('claude-sonnet-4-6');
});
it('applies the default claude preset from the catalog default model mapping', async () => {