From 2a280b608291c1e90724858f7a6386bd9df72be4 Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Wed, 26 Nov 2025 02:09:20 +0100 Subject: [PATCH] feat: Model management and selection features WIP --- tools/server/webui/src/app.d.ts | 4 +- .../dialogs/DialogModelNotAvailable.svelte | 76 ++++++++++++ .../webui/src/lib/components/app/index.ts | 1 + .../components/app/misc/SelectorModel.svelte | 86 ++++++++----- .../src/lib/constants/localstorage-keys.ts | 3 + tools/server/webui/src/lib/enums/index.ts | 2 +- tools/server/webui/src/lib/enums/server.ts | 17 +-- tools/server/webui/src/lib/services/models.ts | 30 +++-- .../webui/src/lib/stores/models.svelte.ts | 115 ++++++++++++++++-- .../webui/src/lib/stores/props.svelte.ts | 79 +++++++++--- .../webui/src/lib/stores/settings.svelte.ts | 17 ++- tools/server/webui/src/lib/types/api.d.ts | 49 ++++++-- tools/server/webui/src/lib/types/models.d.ts | 10 ++ tools/server/webui/src/routes/+layout.svelte | 19 ++- tools/server/webui/src/routes/+page.svelte | 75 +++++++++++- .../webui/src/routes/chat/[id]/+page.svelte | 94 +++++++++++++- 16 files changed, 576 insertions(+), 101 deletions(-) create mode 100644 tools/server/webui/src/lib/components/app/dialogs/DialogModelNotAvailable.svelte diff --git a/tools/server/webui/src/app.d.ts b/tools/server/webui/src/app.d.ts index 8a9cb174bc..a15d1f0d02 100644 --- a/tools/server/webui/src/app.d.ts +++ b/tools/server/webui/src/app.d.ts @@ -23,7 +23,7 @@ import type { ApiRouterModelsUnloadResponse } from '$lib/types/api'; -import { ServerMode, ServerModelStatus, ModelModality } from '$lib/enums'; +import { ServerRole, ServerModelStatus, ModelModality } from '$lib/enums'; import type { ChatMessageType, @@ -94,7 +94,7 @@ declare global { DatabaseMessageExtraPdfFile, DatabaseMessageExtraLegacyContext, ModelModality, - ServerMode, + ServerRole, ServerModelStatus, SettingsConfigValue, SettingsFieldConfig, diff --git a/tools/server/webui/src/lib/components/app/dialogs/DialogModelNotAvailable.svelte b/tools/server/webui/src/lib/components/app/dialogs/DialogModelNotAvailable.svelte new file mode 100644 index 0000000000..a6c20291fa --- /dev/null +++ b/tools/server/webui/src/lib/components/app/dialogs/DialogModelNotAvailable.svelte @@ -0,0 +1,76 @@ + + + + + + + + Model Not Available + + + + The requested model could not be found. Select an available model to continue. + + + +
+
+

+ Requested: {modelName} +

+
+ + {#if availableModels.length > 0} +
+

Select an available model:

+
+ {#each availableModels as model (model)} + + {/each} +
+
+ {/if} +
+ + + handleOpenChange(false)}>Cancel + +
+
diff --git a/tools/server/webui/src/lib/components/app/index.ts b/tools/server/webui/src/lib/components/app/index.ts index 6e55abe4e9..a41c83bdff 100644 --- a/tools/server/webui/src/lib/components/app/index.ts +++ b/tools/server/webui/src/lib/components/app/index.ts @@ -48,6 +48,7 @@ export { default as DialogConversationSelection } from './dialogs/DialogConversa export { default as DialogConversationTitleUpdate } from './dialogs/DialogConversationTitleUpdate.svelte'; export { default as DialogEmptyFileAlert } from './dialogs/DialogEmptyFileAlert.svelte'; export { default as DialogModelInformation } from './dialogs/DialogModelInformation.svelte'; +export { default as DialogModelNotAvailable } from './dialogs/DialogModelNotAvailable.svelte'; // Miscellanous diff --git a/tools/server/webui/src/lib/components/app/misc/SelectorModel.svelte b/tools/server/webui/src/lib/components/app/misc/SelectorModel.svelte index 0bc5a8730e..e2eecadf50 100644 --- a/tools/server/webui/src/lib/components/app/misc/SelectorModel.svelte +++ b/tools/server/webui/src/lib/components/app/misc/SelectorModel.svelte @@ -1,6 +1,6 @@ @@ -32,3 +93,9 @@ + + diff --git a/tools/server/webui/src/routes/chat/[id]/+page.svelte b/tools/server/webui/src/routes/chat/[id]/+page.svelte index 172629bcc1..5daa652dc0 100644 --- a/tools/server/webui/src/routes/chat/[id]/+page.svelte +++ b/tools/server/webui/src/routes/chat/[id]/+page.svelte @@ -1,19 +1,89 @@