From 6cb1e6581118853ae98f087a022553945178e299 Mon Sep 17 00:00:00 2001 From: Zhicheng Han Date: Sun, 10 May 2026 18:51:22 +0200 Subject: [PATCH 1/4] feat(models): add WUI model display aliases Persist display-only model aliases in Web UI app config, surface them in the model selector/search, and keep canonical model IDs for Hermes calls. --- packages/client/src/api/hermes/system.ts | 17 ++- .../src/components/layout/ModelSelector.vue | 72 +++++++++- packages/client/src/i18n/locales/en.ts | 6 + packages/client/src/i18n/locales/zh.ts | 6 + packages/client/src/stores/hermes/app.ts | 36 ++++- .../server/src/controllers/hermes/models.ts | 131 +++++++++++++++++- packages/server/src/routes/hermes/models.ts | 1 + packages/server/src/services/app-config.ts | 4 + tests/client/app-store.test.ts | 44 ++++++ tests/server/model-alias-controller.test.ts | 130 +++++++++++++++++ 10 files changed, 434 insertions(+), 13 deletions(-) create mode 100644 tests/server/model-alias-controller.test.ts diff --git a/packages/client/src/api/hermes/system.ts b/packages/client/src/api/hermes/system.ts index c3589511..67fe702c 100644 --- a/packages/client/src/api/hermes/system.ts +++ b/packages/client/src/api/hermes/system.ts @@ -32,8 +32,8 @@ export interface AvailableModelGroup { models: string[] api_key: string builtin?: boolean - /** 可选:模型 ID -> 元数据(preview/disabled)。目前仅 Copilot 提供。 */ - model_meta?: Record + /** 可选:模型 ID -> 元数据(preview/disabled/alias)。alias 仅用于 Web UI 展示。 */ + model_meta?: Record } export interface AvailableModelsResponse { @@ -41,6 +41,8 @@ export interface AvailableModelsResponse { default_provider: string groups: AvailableModelGroup[] allProviders: AvailableModelGroup[] + /** Web UI-only display aliases keyed by provider -> canonical model ID. */ + model_aliases?: Record> } export interface CustomProvider { @@ -80,6 +82,17 @@ export async function updateDefaultModel(data: { }) } +export async function updateModelAlias(data: { + provider: string + model: string + alias: string +}): Promise { + await request('/api/hermes/model-alias', { + method: 'PUT', + body: JSON.stringify(data), + }) +} + export async function addCustomProvider(data: CustomProvider): Promise { await request('/api/hermes/config/providers', { method: 'POST', diff --git a/packages/client/src/components/layout/ModelSelector.vue b/packages/client/src/components/layout/ModelSelector.vue index 45c60d0f..cf0bdeb4 100644 --- a/packages/client/src/components/layout/ModelSelector.vue +++ b/packages/client/src/components/layout/ModelSelector.vue @@ -1,17 +1,24 @@