From: Pascal Date: Mon, 23 Mar 2026 10:25:35 +0000 (+0100) Subject: webui: fix --webui-config-file settings not applied on load (#20823) X-Git-Tag: upstream/0.0.8611~128 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=c44a932cf495dc1cf73020f62acce6233a0a95f3;p=pkg%2Fggml%2Fsources%2Fllama.cpp webui: fix --webui-config-file settings not applied on load (#20823) * webui: fix --webui-config-file settings not applied on load * chore: update webui build output --- diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz index 11d31b0f6..c4410bf24 100644 Binary files a/tools/server/public/index.html.gz and b/tools/server/public/index.html.gz differ diff --git a/tools/server/webui/src/lib/services/parameter-sync.service.ts b/tools/server/webui/src/lib/services/parameter-sync.service.ts index 1acb5ce45..9a290129e 100644 --- a/tools/server/webui/src/lib/services/parameter-sync.service.ts +++ b/tools/server/webui/src/lib/services/parameter-sync.service.ts @@ -159,6 +159,74 @@ export const SYNCABLE_PARAMETERS: SyncableParameter[] = [ serverKey: 'fullHeightCodeBlocks', type: SyncableParameterType.BOOLEAN, canSync: true + }, + { + key: 'systemMessage', + serverKey: 'systemMessage', + type: SyncableParameterType.STRING, + canSync: true + }, + { + key: 'showSystemMessage', + serverKey: 'showSystemMessage', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { key: 'theme', serverKey: 'theme', type: SyncableParameterType.STRING, canSync: true }, + { + key: 'copyTextAttachmentsAsPlainText', + serverKey: 'copyTextAttachmentsAsPlainText', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'showRawOutputSwitch', + serverKey: 'showRawOutputSwitch', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'alwaysShowSidebarOnDesktop', + serverKey: 'alwaysShowSidebarOnDesktop', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'autoShowSidebarOnNewChat', + serverKey: 'autoShowSidebarOnNewChat', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'showRawModelNames', + serverKey: 'showRawModelNames', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { key: 'mcpServers', serverKey: 'mcpServers', type: SyncableParameterType.STRING, canSync: true }, + { + key: 'agenticMaxTurns', + serverKey: 'agenticMaxTurns', + type: SyncableParameterType.NUMBER, + canSync: true + }, + { + key: 'agenticMaxToolPreviewLines', + serverKey: 'agenticMaxToolPreviewLines', + type: SyncableParameterType.NUMBER, + canSync: true + }, + { + key: 'showToolCallInProgress', + serverKey: 'showToolCallInProgress', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'alwaysShowAgenticTurns', + serverKey: 'alwaysShowAgenticTurns', + type: SyncableParameterType.BOOLEAN, + canSync: true } ]; diff --git a/tools/server/webui/src/lib/stores/settings.svelte.ts b/tools/server/webui/src/lib/stores/settings.svelte.ts index 2fbff8312..9d5e77adf 100644 --- a/tools/server/webui/src/lib/stores/settings.svelte.ts +++ b/tools/server/webui/src/lib/stores/settings.svelte.ts @@ -287,8 +287,12 @@ class SettingsStore { */ resetParameterToServerDefault(key: string): void { const serverDefaults = this.getServerDefaults(); + const webuiSettings = serverStore.webuiSettings; - if (serverDefaults[key] !== undefined) { + if (webuiSettings && key in webuiSettings) { + // UI setting from admin config: write actual value + setConfigValue(this.config, key, webuiSettings[key]); + } else if (serverDefaults[key] !== undefined) { // sampling param known by server: clear it, let server decide setConfigValue(this.config, key, ''); } else if (key in SETTING_CONFIG_DEFAULT) { @@ -327,6 +331,17 @@ class SettingsStore { } } + // webui settings need actual values in config (no placeholder mechanism), + // so write them for non-overridden keys + const webuiSettings = serverStore.webuiSettings; + if (webuiSettings) { + for (const [key, value] of Object.entries(webuiSettings)) { + if (!this.userOverrides.has(key) && value !== undefined) { + setConfigValue(this.config, key, value); + } + } + } + this.saveConfig(); console.log('User overrides after sync:', Array.from(this.userOverrides)); } @@ -338,8 +353,14 @@ class SettingsStore { */ forceSyncWithServerDefaults(): void { const propsDefaults = this.getServerDefaults(); + const webuiSettings = serverStore.webuiSettings; + for (const key of ParameterSyncService.getSyncableParameterKeys()) { - if (propsDefaults[key] !== undefined) { + if (webuiSettings && key in webuiSettings) { + // UI setting from admin config: write actual value + setConfigValue(this.config, key, webuiSettings[key]); + } else if (propsDefaults[key] !== undefined) { + // sampling param: clear it, let server decide setConfigValue(this.config, key, ''); } else if (key in SETTING_CONFIG_DEFAULT) { setConfigValue(this.config, key, getConfigValue(SETTING_CONFIG_DEFAULT, key));