diff --git a/apps/web/src/modules/admin-ai-provider-settings/AdminAiProviderSettingsPage.vue b/apps/web/src/modules/admin-ai-provider-settings/AdminAiProviderSettingsPage.vue index 75fae19..fb41dcc 100644 --- a/apps/web/src/modules/admin-ai-provider-settings/AdminAiProviderSettingsPage.vue +++ b/apps/web/src/modules/admin-ai-provider-settings/AdminAiProviderSettingsPage.vue @@ -2,6 +2,7 @@ import { computed, onMounted, ref } from 'vue'; import { CODEX_MODEL_OPTIONS, + DEFAULT_CODEX_MODEL, DEFAULT_SETTINGS, deleteProviderConfig, disconnectCodex, @@ -30,7 +31,7 @@ const loading = ref(false); const saving = ref(false); const redirectUrl = ref(''); const showRedirectPanel = ref(false); -const codexModel = ref(CODEX_MODEL_OPTIONS[0]); +const codexModel = ref(DEFAULT_CODEX_MODEL); const openaiForm = ref({ apiKey: '', baseUrl: DEFAULT_SETTINGS.openai.baseUrl, model: DEFAULT_SETTINGS.openai.model }); const geminiForm = ref({ apiKey: '', baseUrl: DEFAULT_SETTINGS.gemini.baseUrl, model: DEFAULT_SETTINGS.gemini.model }); @@ -69,7 +70,7 @@ async function loadPage(): Promise { ]); settings.value = nextSettings; codexStatus.value = nextCodex; - codexModel.value = nextCodex.model || CODEX_MODEL_OPTIONS[0]; + codexModel.value = nextCodex.model || DEFAULT_CODEX_MODEL; openaiForm.value = { apiKey: '', baseUrl: nextSettings.openai.baseUrl, model: nextSettings.openai.model }; geminiForm.value = { apiKey: '', baseUrl: nextSettings.gemini.baseUrl, model: nextSettings.gemini.model }; status.value = 'AI provider settings loaded'; diff --git a/apps/web/src/modules/admin-ai-provider-settings/api.ts b/apps/web/src/modules/admin-ai-provider-settings/api.ts index 08e255e..f62501a 100644 --- a/apps/web/src/modules/admin-ai-provider-settings/api.ts +++ b/apps/web/src/modules/admin-ai-provider-settings/api.ts @@ -50,7 +50,9 @@ export const CODEX_MODEL_OPTIONS = [ 'gpt-5.4-mini', 'gpt-5.3-codex', 'gpt-5.2' -]; +] as const satisfies readonly [string, ...string[]]; + +export const DEFAULT_CODEX_MODEL = CODEX_MODEL_OPTIONS[0]; export async function fetchAiProviderSettings(): Promise { return normalizeSettings(await requestAdmin('/api/ai-provider-settings')); @@ -151,7 +153,7 @@ function normalizeCodexStatus(payload: unknown): CodexConnectionStatus { connected: record.connected === true, keyType: record.keyType === 'oauth' ? 'oauth' : null, updatedAt: readString(record.updatedAt) || null, - model: readString(record.model) || CODEX_MODEL_OPTIONS[0], + model: readString(record.model) || DEFAULT_CODEX_MODEL, purposes: Array.isArray(record.purposes) ? record.purposes.filter((item): item is string => typeof item === 'string') : [], clientIdConfigured: record.clientIdConfigured !== false };