From 9cb14eef522da26dadd6d01150fd44ca42347eab Mon Sep 17 00:00:00 2001 From: SiYue-ZO <2835601846@qq.com> Date: Wed, 6 May 2026 18:11:38 +0800 Subject: [PATCH] fix(web): add credential warning for catalog imports from remote providers When importing models from a catalog entry whose provider requires an API key, a yellow warning banner now informs users that credentials will need to be configured after import. --- .../src/components/models/catalog-dialog.tsx | 67 +++++++++++-------- web/frontend/src/i18n/locales/en.json | 3 +- web/frontend/src/i18n/locales/zh.json | 5 +- 3 files changed, 43 insertions(+), 32 deletions(-) diff --git a/web/frontend/src/components/models/catalog-dialog.tsx b/web/frontend/src/components/models/catalog-dialog.tsx index 6fabb0fad..9fe7283c4 100644 --- a/web/frontend/src/components/models/catalog-dialog.tsx +++ b/web/frontend/src/components/models/catalog-dialog.tsx @@ -28,6 +28,7 @@ import { Input } from "@/components/ui/input" import { refreshGatewayState } from "@/store/gateway" import { getProviderLabel } from "./provider-label" +import { PROVIDER_MAP } from "./provider-registry" interface CatalogDialogProps { open: boolean @@ -89,7 +90,9 @@ export function CatalogDialog({ const next = new Map(prev) const current = next.get(catalogId) || new Set() const filtered = filter - ? models.filter((m) => m.id.toLowerCase().includes(filter.toLowerCase())) + ? models.filter((m) => + m.id.toLowerCase().includes(filter.toLowerCase()), + ) : models if (filtered.every((m) => current.has(m.id))) { next.set(catalogId, new Set()) @@ -159,14 +162,14 @@ export function CatalogDialog({
{loading && ( -
+
{t("models.catalog.loading")}
)} {!loading && entries.length === 0 && ( -
+
{t("models.catalog.empty")}
)} @@ -189,27 +192,27 @@ export function CatalogDialog({ return (
toggleExpand(entry.id)} > {isExpanded ? ( - + ) : ( - + )}
{getProviderLabel(entry.provider)} - + {entry.api_key_mask}
-
+
{entry.models.length} {t("models.catalog.models")} @@ -234,7 +237,7 @@ export function CatalogDialog({ @@ -270,7 +271,7 @@ export function CatalogDialog({ {filteredModels.map((m) => (
{entrySelected.size > 0 && ( -
- +
+ {PROVIDER_MAP.get(entry.provider)?.requiresApiKey !== + false && ( +
+ {t("models.catalog.needApiKey")} +
+ )} +
+ +
)}
diff --git a/web/frontend/src/i18n/locales/en.json b/web/frontend/src/i18n/locales/en.json index 61b1eb55e..d6335d6dc 100644 --- a/web/frontend/src/i18n/locales/en.json +++ b/web/frontend/src/i18n/locales/en.json @@ -345,7 +345,8 @@ "selectAll": "Select All", "deselectAll": "Deselect All", "addSelected": "Add {{count}} Selected", - "addSuccess": "Added {{count}} model(s) to configuration." + "addSuccess": "Added {{count}} model(s) to configuration.", + "needApiKey": "These models require an API key. You'll need to configure credentials after import." }, "test": { "title": "Test Model Connectivity", diff --git a/web/frontend/src/i18n/locales/zh.json b/web/frontend/src/i18n/locales/zh.json index 727587d89..f9e733a50 100644 --- a/web/frontend/src/i18n/locales/zh.json +++ b/web/frontend/src/i18n/locales/zh.json @@ -347,7 +347,8 @@ "selectAll": "全选", "deselectAll": "取消全选", "addSelected": "添加 {{count}} 个选中模型", - "addSuccess": "已添加 {{count}} 个模型到配置中。" + "addSuccess": "已添加 {{count}} 个模型到配置中。", + "needApiKey": "这些模型需要 API Key。导入后需要配置凭证才能使用。" }, "test": { "title": "测试模型连通性", @@ -828,4 +829,4 @@ "description": "需要更多帮助?点击右上角的文档按钮,查看详细的使用文档和配置指南。" } } -} \ No newline at end of file +}