From a42ed5d31acb894f6409e9df1ff46d7bf87c3d39 Mon Sep 17 00:00:00 2001 From: yangshen <1322568757@qq.com> Date: Fri, 27 Mar 2026 13:23:39 +0800 Subject: [PATCH 1/2] fix(settings): allow model-level test connection without client-side API key and fix i18n keys Remove the client-side apiKey guard in model edit dialog so test connection delegates to the server (matching provider-level behavior). Also replace non-existent common.save/common.cancel i18n keys with settings.saveModel/ settings.cancelEdit in image and video model dialogs. Closes #308 Co-Authored-By: Claude Opus 4.6 (1M context) --- components/settings/image-settings.tsx | 4 ++-- components/settings/model-edit-dialog.tsx | 4 +--- components/settings/video-settings.tsx | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/components/settings/image-settings.tsx b/components/settings/image-settings.tsx index 172bd749..0931cb2b 100644 --- a/components/settings/image-settings.tsx +++ b/components/settings/image-settings.tsx @@ -334,10 +334,10 @@ export function ImageSettings({ selectedProviderId }: ImageSettingsProps) {
diff --git a/components/settings/model-edit-dialog.tsx b/components/settings/model-edit-dialog.tsx index aae60a09..9b4ff565 100644 --- a/components/settings/model-edit-dialog.tsx +++ b/components/settings/model-edit-dialog.tsx @@ -59,9 +59,7 @@ export function ModelEditDialog({ }; const handleTestModel = useCallback(async () => { - if (!editingModel || !apiKey) { - setTestStatus('error'); - setTestMessage(t('settings.apiKeyRequired') || 'API Key is required'); + if (!editingModel) { return; } diff --git a/components/settings/video-settings.tsx b/components/settings/video-settings.tsx index ffe3506e..0260c165 100644 --- a/components/settings/video-settings.tsx +++ b/components/settings/video-settings.tsx @@ -337,10 +337,10 @@ export function VideoSettings({ selectedProviderId }: VideoSettingsProps) {
From 543493547ac365acca11609b79e38b4a59123e06 Mon Sep 17 00:00:00 2001 From: yangshen <1322568757@qq.com> Date: Fri, 27 Mar 2026 13:36:38 +0800 Subject: [PATCH 2/2] fix(settings): disable model-level test button when no API key is available Match provider-level behavior: disable the test connection button in the model edit dialog when requiresApiKey && !apiKey && !isServerConfigured. --- components/settings/index.tsx | 1 + components/settings/model-edit-dialog.tsx | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/components/settings/index.tsx b/components/settings/index.tsx index 828cb693..69d8d93d 100644 --- a/components/settings/index.tsx +++ b/components/settings/index.tsx @@ -1028,6 +1028,7 @@ export function SettingsDialog({ open, onOpenChange, initialSection }: SettingsD baseUrl={providersConfig[selectedProviderId]?.baseUrl} providerType={providersConfig[selectedProviderId]?.type} requiresApiKey={providersConfig[selectedProviderId]?.requiresApiKey} + isServerConfigured={providersConfig[selectedProviderId]?.isServerConfigured} /> {/* Add Provider Dialog */} diff --git a/components/settings/model-edit-dialog.tsx b/components/settings/model-edit-dialog.tsx index 9b4ff565..d2f9cb3e 100644 --- a/components/settings/model-edit-dialog.tsx +++ b/components/settings/model-edit-dialog.tsx @@ -24,6 +24,7 @@ interface ModelEditDialogProps { baseUrl?: string; providerType?: string; requiresApiKey?: boolean; + isServerConfigured?: boolean; } export function ModelEditDialog({ @@ -38,6 +39,7 @@ export function ModelEditDialog({ baseUrl, providerType, requiresApiKey, + isServerConfigured, }: ModelEditDialogProps) { const { t } = useI18n(); const [testStatus, setTestStatus] = useState<'idle' | 'testing' | 'success' | 'error'>('idle'); @@ -303,7 +305,11 @@ export function ModelEditDialog({ variant="outline" size="sm" onClick={handleTestModel} - disabled={!editingModel.model.id || testStatus === 'testing'} + disabled={ + !editingModel.model.id || + testStatus === 'testing' || + (requiresApiKey && !apiKey && !isServerConfigured) + } className={cn( testStatus === 'success' && 'border-green-600 text-green-600 hover:bg-green-50', testStatus === 'error' && 'border-red-600 text-red-600 hover:bg-red-50',