From 3a1893d40147b6f523171c7cf9054a9a156371a2 Mon Sep 17 00:00:00 2001 From: Zhicheng Han <43314240+hanzckernel@users.noreply.github.com> Date: Mon, 11 May 2026 15:24:45 +0200 Subject: [PATCH] =?UTF-8?q?Models=EF=BC=9A=E6=94=AF=E6=8C=81=E5=9C=A8=20We?= =?UTF-8?q?b=20UI=20=E9=87=8C=E7=AE=A1=E7=90=86=E5=8F=AF=E8=A7=81=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=20(#613)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(models): add WUI model visibility filter Store provider model visibility in Web UI app config and filter the WUI model picker/model page without rewriting Hermes CLI config or canonical model IDs. * fix(models): sync sidebar after visibility changes --- packages/client/src/api/hermes/system.ts | 21 ++ .../components/hermes/models/ProviderCard.vue | 127 +++++++++- packages/client/src/i18n/locales/en.ts | 7 + packages/client/src/i18n/locales/zh.ts | 7 + packages/client/src/stores/hermes/app.ts | 39 +++- packages/client/src/stores/hermes/models.ts | 2 + .../server/src/controllers/hermes/models.ts | 140 ++++++++++- packages/server/src/routes/hermes/models.ts | 1 + packages/server/src/services/app-config.ts | 10 + tests/client/app-store.test.ts | 72 ++++++ tests/client/models-store.test.ts | 75 ++++++ .../model-visibility-controller.test.ts | 221 ++++++++++++++++++ 12 files changed, 710 insertions(+), 12 deletions(-) create mode 100644 tests/client/models-store.test.ts create mode 100644 tests/server/model-visibility-controller.test.ts diff --git a/packages/client/src/api/hermes/system.ts b/packages/client/src/api/hermes/system.ts index c358951..5e2fe0a 100644 --- a/packages/client/src/api/hermes/system.ts +++ b/packages/client/src/api/hermes/system.ts @@ -25,11 +25,20 @@ export interface ConfigModelsResponse { groups: ModelGroup[] } +export interface ModelVisibilityRule { + mode: 'all' | 'include' + models: string[] +} + +export type ModelVisibility = Record + export interface AvailableModelGroup { provider: string // credential pool key (e.g. "zai", "custom:subrouter.ai") label: string // display name (e.g. "zai", "subrouter.ai") base_url: string models: string[] + /** Full unfiltered model catalog for this provider, used to restore hidden WUI models. */ + available_models?: string[] api_key: string builtin?: boolean /** 可选:模型 ID -> 元数据(preview/disabled)。目前仅 Copilot 提供。 */ @@ -41,6 +50,7 @@ export interface AvailableModelsResponse { default_provider: string groups: AvailableModelGroup[] allProviders: AvailableModelGroup[] + model_visibility?: ModelVisibility } export interface CustomProvider { @@ -104,3 +114,14 @@ export async function updateProvider(poolKey: string, data: { body: JSON.stringify(data), }) } + +export async function updateModelVisibility(data: { + provider: string + mode: 'all' | 'include' + models: string[] +}): Promise<{ success: boolean; model_visibility: ModelVisibility }> { + return request<{ success: boolean; model_visibility: ModelVisibility }>('/api/hermes/model-visibility', { + method: 'PUT', + body: JSON.stringify(data), + }) +} diff --git a/packages/client/src/components/hermes/models/ProviderCard.vue b/packages/client/src/components/hermes/models/ProviderCard.vue index 2dc9d02..7e20ddd 100644 --- a/packages/client/src/components/hermes/models/ProviderCard.vue +++ b/packages/client/src/components/hermes/models/ProviderCard.vue @@ -1,6 +1,6 @@