mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-14 08:18:04 +00:00
fix: keep live catalog defaults visible
This commit is contained in:
1 parent
c21f589247
commit
f9dec01cfd
7 files changed
+87
-18
No files matched your search
@@ -792,11 +792,19 @@ export function buildUiCatalog(
|
||||
availableModels.some(
|
||||
(model) => normalizeModelId(model.id) === normalizeModelId(fallbackDefaultModel)
|
||||
);
|
||||
const hasLiveDefaultModel = availableModels.some(
|
||||
(model) => normalizeModelId(model.id) === normalizeModelId(liveCatalog.defaultModel)
|
||||
);
|
||||
const defaultModel = hasFallbackDefaultModel
|
||||
? fallbackDefaultModel
|
||||
: hasLiveDefaultModel
|
||||
? liveCatalog.defaultModel
|
||||
: (models[0]?.id ?? '');
|
||||
|
||||
return {
|
||||
provider: liveCatalog.provider,
|
||||
displayName: liveCatalog.displayName || staticCatalog?.displayName || provider,
|
||||
defaultModel: hasFallbackDefaultModel ? fallbackDefaultModel : liveCatalog.defaultModel,
|
||||
defaultModel,
|
||||
models,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -66,11 +66,12 @@ export async function applyDefaultPreset(
|
||||
const defaultModelEntry =
|
||||
resolvedCatalog.models.find((model) => model.id === resolvedCatalog.defaultModel) ||
|
||||
resolvedCatalog.models[0];
|
||||
const selectedModelId = defaultModelEntry?.id ?? resolvedCatalog.defaultModel;
|
||||
const mapping = defaultModelEntry?.presetMapping || {
|
||||
default: resolvedCatalog.defaultModel,
|
||||
opus: resolvedCatalog.defaultModel,
|
||||
sonnet: resolvedCatalog.defaultModel,
|
||||
haiku: resolvedCatalog.defaultModel,
|
||||
default: selectedModelId,
|
||||
opus: selectedModelId,
|
||||
sonnet: selectedModelId,
|
||||
haiku: selectedModelId,
|
||||
};
|
||||
|
||||
// Fetch effective API key (respects user customization)
|
||||
|
||||
@@ -116,6 +116,55 @@ describe('claude preset utils', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('builds UI catalogs with a visible default when the live default is stale', () => {
|
||||
const liveCatalogs = {
|
||||
gemini: {
|
||||
provider: 'gemini',
|
||||
displayName: 'Gemini',
|
||||
defaultModel: 'gemini-2.5-pro',
|
||||
models: [{ id: 'gemini-live-only', name: 'Gemini Live Only' }],
|
||||
},
|
||||
};
|
||||
|
||||
const catalogs = buildUiCatalogs(liveCatalogs);
|
||||
|
||||
expect(catalogs.gemini?.defaultModel).toBe('gemini-live-only');
|
||||
expect(catalogs.gemini?.models.map((model) => model.id)).toContain(
|
||||
catalogs.gemini?.defaultModel
|
||||
);
|
||||
});
|
||||
|
||||
it('uses the selected visible model for quick setup fallback mappings', 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('gemini', undefined, {
|
||||
provider: 'gemini',
|
||||
displayName: 'Gemini',
|
||||
defaultModel: 'gemini-2.5-pro',
|
||||
models: [{ id: 'gemini-live-only', name: 'Gemini Live Only' }],
|
||||
});
|
||||
|
||||
expect(result).toEqual({ success: true, presetName: 'Gemini Live Only' });
|
||||
|
||||
const [, requestInit] = fetchMock.mock.calls[1] ?? [];
|
||||
const body = JSON.parse(String(requestInit?.body));
|
||||
|
||||
expect(body.settings.env).toMatchObject({
|
||||
ANTHROPIC_MODEL: 'gemini-live-only',
|
||||
ANTHROPIC_DEFAULT_OPUS_MODEL: 'gemini-live-only',
|
||||
ANTHROPIC_DEFAULT_SONNET_MODEL: 'gemini-live-only',
|
||||
ANTHROPIC_DEFAULT_HAIKU_MODEL: 'gemini-live-only',
|
||||
});
|
||||
});
|
||||
|
||||
it('keeps Gemini presets on 3.1 Pro while resolving 3/3.1 alias variants', () => {
|
||||
const geminiCatalog = MODEL_CATALOGS.gemini;
|
||||
const latestPro = geminiCatalog.models.find((model) => model.id === 'gemini-3.1-pro-preview');
|
||||
|
||||
Reference in new issue
Block a user