Merge pull request #682 from 0xble/fix/claude-base-models

fix(config): update claude base models to latest
This commit is contained in:
Kai (Tam Nhu) Tran authored and GitHub committed 2026-03-07 03:56:06 -05:00
commit 84a2dd013d
9 files changed
+110 -14

No files matched your search

@@ -56,7 +56,7 @@ export function useCopilotConfigForm() {
const autoStart = localOverrides.autoStart ?? config?.auto_start ?? false;
const port = localOverrides.port ?? config?.port ?? 4141;
const accountType = localOverrides.accountType ?? config?.account_type ?? 'individual';
const currentModel = localOverrides.model ?? config?.model ?? 'claude-sonnet-4-5-20250929';
const currentModel = localOverrides.model ?? config?.model ?? 'claude-sonnet-4-6';
const rateLimit = localOverrides.rateLimit ?? config?.rate_limit?.toString() ?? '';
const waitOnLimit = localOverrides.waitOnLimit ?? config?.wait_on_limit ?? true;
const opusModel = localOverrides.opusModel ?? config?.opus_model ?? '';
@@ -18,7 +18,7 @@ import type { Profile } from '@/lib/api-client';
import { ChevronDown, ChevronRight } from 'lucide-react';
import { useTranslation } from 'react-i18next';
const DEFAULT_MODEL = 'claude-sonnet-4-5-20250929';
const DEFAULT_MODEL = 'claude-sonnet-4-6';
const schema = z.object({
name: z
+14 -2
View File
@@ -441,7 +441,7 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
claude: {
provider: 'claude',
displayName: 'Claude (Anthropic)',
defaultModel: 'claude-sonnet-4-5-20250929',
defaultModel: 'claude-sonnet-4-6',
models: [
{
id: 'claude-opus-4-6',
@@ -451,7 +451,19 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
presetMapping: {
default: 'claude-opus-4-6',
opus: 'claude-opus-4-6',
sonnet: 'claude-sonnet-4-5-20250929',
sonnet: 'claude-sonnet-4-6',
haiku: 'claude-haiku-4-5-20251001',
},
},
{
id: 'claude-sonnet-4-6',
name: 'Claude Sonnet 4.6',
description: 'Balanced performance and speed',
extendedContext: true,
presetMapping: {
default: 'claude-sonnet-4-6',
opus: 'claude-opus-4-6',
sonnet: 'claude-sonnet-4-6',
haiku: 'claude-haiku-4-5-20251001',
},
},
+5 -5
View File
@@ -27,7 +27,7 @@ async function fetchEffectiveApiKey(): Promise<string> {
/**
* Apply default preset for a provider to its settings
* Uses the first model's presetMapping or falls back to using defaultModel for all tiers
* Uses the catalog default model's preset mapping or falls back to using defaultModel for all tiers
*
* @param provider - The provider ID (e.g., 'gemini', 'codex', 'agy')
* @param port - Optional custom port (defaults to CLIPROXY_DEFAULT_PORT)
@@ -40,9 +40,9 @@ export async function applyDefaultPreset(
const catalog = MODEL_CATALOGS[provider];
if (!catalog) return { success: false };
// Get the first (recommended) model's preset mapping
const firstModel = catalog.models[0];
const mapping = firstModel?.presetMapping || {
const defaultModelEntry =
catalog.models.find((model) => model.id === catalog.defaultModel) || catalog.models[0];
const mapping = defaultModelEntry?.presetMapping || {
default: catalog.defaultModel,
opus: catalog.defaultModel,
sonnet: catalog.defaultModel,
@@ -72,7 +72,7 @@ export async function applyDefaultPreset(
});
return {
success: res.ok,
presetName: firstModel?.name || catalog.defaultModel,
presetName: defaultModelEntry?.name || catalog.defaultModel,
};
} catch {
return { success: false };
+44
View File
@@ -0,0 +1,44 @@
import { afterEach, describe, expect, it, vi } from 'vitest';
import { MODEL_CATALOGS } from '@/lib/model-catalogs';
import { applyDefaultPreset } from '@/lib/preset-utils';
describe('claude preset utils', () => {
afterEach(() => {
vi.unstubAllGlobals();
vi.restoreAllMocks();
});
it('keeps the claude catalog default on Sonnet 4.6', () => {
const claudeCatalog = MODEL_CATALOGS.claude;
expect(claudeCatalog.defaultModel).toBe('claude-sonnet-4-6');
expect(claudeCatalog.models.map((model) => model.id)).toContain('claude-sonnet-4-6');
});
it('applies the default claude preset from the catalog default model mapping', async () => {
const fetchMock = vi
.fn()
.mockResolvedValueOnce({
ok: true,
json: async () => ({ apiKey: { value: 'managed-key' } }),
})
.mockResolvedValueOnce({ ok: true });
vi.stubGlobal('fetch', fetchMock);
const result = await applyDefaultPreset('claude');
expect(result).toEqual({ success: true, presetName: 'Claude Sonnet 4.6' });
const [, requestInit] = fetchMock.mock.calls[1] ?? [];
const body = JSON.parse(String(requestInit?.body));
expect(body.settings.env).toMatchObject({
ANTHROPIC_MODEL: 'claude-sonnet-4-6',
ANTHROPIC_DEFAULT_OPUS_MODEL: 'claude-opus-4-6',
ANTHROPIC_DEFAULT_SONNET_MODEL: 'claude-sonnet-4-6',
ANTHROPIC_DEFAULT_HAIKU_MODEL: 'claude-haiku-4-5-20251001',
});
});
});