fix(cliproxy): refresh upstream model and quota surfaces (#1158)

* fix(cliproxy): refresh upstream model and quota surfaces

* test(cliproxy): cover codex legacy model fallback
This commit is contained in:
Kai (Tam Nhu) Tran authored and GitHub committed 2026-05-01 02:19:31 -04:00
1 parent 66865127d7
commit 50b0ffba75
7 files changed
+220 -97

No files matched your search

@@ -45,7 +45,7 @@ describe('ModelConfigSection presets', () => {
ANTHROPIC_MODEL: 'gpt-5.4',
ANTHROPIC_DEFAULT_OPUS_MODEL: 'gpt-5.4',
ANTHROPIC_DEFAULT_SONNET_MODEL: 'gpt-5.4',
ANTHROPIC_DEFAULT_HAIKU_MODEL: 'gpt-5-codex-mini',
ANTHROPIC_DEFAULT_HAIKU_MODEL: 'gpt-5.4-mini',
});
});
@@ -130,6 +130,27 @@ describe('FlexibleModelSelector', () => {
expect(screen.getAllByText('gpt-5.3-codex-high').length).toBeGreaterThan(0);
});
it('preserves saved legacy codex model IDs under the current-value fallback', async () => {
render(
<FlexibleModelSelector
label="Primary model"
value="gpt-5-codex"
onChange={vi.fn()}
catalog={MODEL_CATALOGS.codex}
allModels={[]}
/>
);
expect(screen.getByRole('button', { name: /gpt-5-codex/i })).toBeInTheDocument();
await userEvent.click(screen.getByRole('button', { name: /gpt-5-codex/i }));
expect(screen.getByText('Current value')).toBeInTheDocument();
expect(screen.getAllByText('gpt-5-codex').length).toBeGreaterThan(0);
expect(screen.getByText('gpt-5.4')).toBeInTheDocument();
expect(screen.getByText('gpt-5.4-mini')).toBeInTheDocument();
});
it('preserves explicit suffixes on supplemental codex models outside the static catalog', async () => {
const onChange = vi.fn();
@@ -2,17 +2,22 @@ import { describe, expect, it } from 'vitest';
import { MODEL_CATALOGS } from '@/lib/model-catalogs';
describe('codex model catalog defaults', () => {
it('uses gpt-5-codex-mini as the haiku mapping for cross-plan codex presets', () => {
it('mirrors the current Codex runtime catalog and free-safe defaults', () => {
const codexCatalog = MODEL_CATALOGS.codex;
const codex55 = codexCatalog.models.find((model) => model.id === 'gpt-5.5');
const codex53 = codexCatalog.models.find((model) => model.id === 'gpt-5.3-codex');
const codex52 = codexCatalog.models.find((model) => model.id === 'gpt-5.2-codex');
const codexMini = codexCatalog.models.find((model) => model.id === 'gpt-5-codex-mini');
const codex52 = codexCatalog.models.find((model) => model.id === 'gpt-5.2');
const codex54 = codexCatalog.models.find((model) => model.id === 'gpt-5.4');
const codexMini = codexCatalog.models.find((model) => model.id === 'gpt-5.4-mini');
expect(codex55?.presetMapping?.haiku).toBe('gpt-5-codex-mini');
expect(codexCatalog.defaultModel).toBe('gpt-5.4');
expect(codex55?.tier).toBe('paid');
expect(codex55?.presetMapping?.haiku).toBe('gpt-5.4-mini');
expect(codex55?.codexMaxEffort).toBe('xhigh');
expect(codex53?.presetMapping?.haiku).toBe('gpt-5-codex-mini');
expect(codex52?.presetMapping?.haiku).toBe('gpt-5-codex-mini');
expect(codex54?.tier).toBeUndefined();
expect(codex54?.presetMapping?.haiku).toBe('gpt-5.4-mini');
expect(codex53?.presetMapping?.haiku).toBe('gpt-5.4-mini');
expect(codex52?.presetMapping?.haiku).toBe('gpt-5.4-mini');
expect(codex53?.codexMaxEffort).toBe('xhigh');
expect(codexMini?.codexMaxEffort).toBe('high');
});