diff --git a/src/pages/AiProvidersOpenAIEditPage.tsx b/src/pages/AiProvidersOpenAIEditPage.tsx index 2b42681..c68e377 100644 --- a/src/pages/AiProvidersOpenAIEditPage.tsx +++ b/src/pages/AiProvidersOpenAIEditPage.tsx @@ -6,6 +6,7 @@ import { Card } from '@/components/ui/Card'; import { HeaderInputList } from '@/components/ui/HeaderInputList'; import { Input } from '@/components/ui/Input'; import { ModelInputList } from '@/components/ui/ModelInputList'; +import { Select } from '@/components/ui/Select'; import { SecondaryScreenShell } from '@/components/common/SecondaryScreenShell'; import { useEdgeSwipeBack } from '@/hooks/useEdgeSwipeBack'; import { useNotificationStore } from '@/stores'; @@ -139,6 +140,20 @@ export function AiProvidersOpenAIEditPage() { const canSave = !disableControls && !loading && !saving && !invalidIndexParam && !invalidIndex && !isTestingKeys; const hasConfiguredModels = form.modelEntries.some((entry) => entry.name.trim()); const hasTestableKeys = form.apiKeyEntries.some((entry) => entry.apiKey?.trim()); + const modelSelectOptions = useMemo(() => { + const seen = new Set(); + return form.modelEntries.reduce>((acc, entry) => { + const name = entry.name.trim(); + if (!name || seen.has(name)) return acc; + seen.add(name); + const alias = entry.alias.trim(); + acc.push({ + value: name, + label: alias && alias !== name ? `${name} (${alias})` : name, + }); + return acc; + }, []); + }, [form.modelEntries]); const connectivityConfigSignature = useMemo(() => { const headersSignature = form.headers .map((entry) => `${entry.key.trim()}:${entry.value.trim()}`) @@ -589,34 +604,23 @@ export function AiProvidersOpenAIEditPage() { {t('ai_providers.openai_test_hint')}
- + : t('ai_providers.openai_test_select_empty') + } + className={styles.openaiTestSelect} + ariaLabel={t('ai_providers.openai_test_title')} + disabled={saving || disableControls || isTestingKeys || testStatus === 'loading' || availableModels.length === 0} + />