webui: Add Import/Export of Settings configuration + improve architecture (#22803)

* refactor: Settings keys as constant object keys

* chore: Run `npm audit fix`

* refactor: Settings Sections UI

* feat: Refactor Settings structure and implement import/export logic

* feat: Introduce ROUTES constant and RouterService

* refactor: Consolidate settings definitions into registry

* refactor: Update settings page routing structure

* chore: Migrate hardcoded URLs to use ROUTES and RouterService

* feat: Enhance model selection logic for settings and chat

* chore: Update webui static build

* refactor: Address PR review comments

* fix: Remove unneeded setting

* fix: Re-add missing settings

* fix: Add missing `/slots` proxy for webui dev mode

* chore: Dev-mode logs

* fix: Data binding

* fix: Steering for non-agentic flow
This commit is contained in:
Aleksander Grygier
2026-05-08 11:26:04 +02:00
committed by GitHub
parent a8fd165fec
commit 9b2925e1e0
55 changed files with 5133 additions and 4615 deletions
@@ -2,6 +2,7 @@ import { convertPDFToImage, convertPDFToText } from './pdf-processing';
import { isSvgMimeType, svgBase64UrlToPngDataURL } from './svg-to-png';
import { isWebpMimeType, webpBase64UrlToPngDataURL } from './webp-to-png';
import { FileTypeCategory, AttachmentType, SpecialFileType } from '$lib/enums';
import { SETTINGS_KEYS } from '$lib/constants';
import { config, settingsStore } from '$lib/stores/settings.svelte';
import { modelsStore } from '$lib/stores/models.svelte';
import { getFileTypeCategory } from '$lib/utils';
@@ -106,7 +107,7 @@ export async function parseFilesToMessageExtras(
console.log('Non-vision model detected: forcing PDF-to-text mode and updating settings');
// Update the setting in localStorage
settingsStore.updateConfig('pdfAsImage', false);
settingsStore.updateConfig(SETTINGS_KEYS.PDF_AS_IMAGE, false);
// Show toast notification to user
toast.warning(
@@ -1,6 +1,7 @@
import { isSvgMimeType, svgBase64UrlToPngDataURL } from './svg-to-png';
import { isWebpMimeType, webpBase64UrlToPngDataURL } from './webp-to-png';
import { FileTypeCategory } from '$lib/enums';
import { SETTINGS_KEYS } from '$lib/constants';
import { modelsStore } from '$lib/stores/models.svelte';
import { settingsStore } from '$lib/stores/settings.svelte';
import { toast } from 'svelte-sonner';
@@ -104,7 +105,7 @@ export async function processFilesToChatUploaded(
action: {
label: 'Enable PDF as Images',
onClick: () => {
settingsStore.updateConfig('pdfAsImage', true);
settingsStore.updateConfig(SETTINGS_KEYS.PDF_AS_IMAGE, true);
toast.success('PDF parsing as images enabled!', {
duration: 3000
});