diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz
index 4527cb33567..01381c084c3 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/components/app/chat/ChatSettings/ChatSettings.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettings.svelte
index 67df20439c6..5cfd2f0fa57 100644
--- a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettings.svelte
+++ b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettings.svelte
@@ -109,6 +109,11 @@
key: 'disableAutoScroll',
label: 'Disable automatic scroll',
type: 'checkbox'
+ },
+ {
+ key: 'alwaysShowSidebarOnDesktop',
+ label: 'Always show sidebar on desktop',
+ type: 'checkbox'
}
]
},
diff --git a/tools/server/webui/src/lib/constants/settings-config.ts b/tools/server/webui/src/lib/constants/settings-config.ts
index 1fc35b48c41..0b385a19732 100644
--- a/tools/server/webui/src/lib/constants/settings-config.ts
+++ b/tools/server/webui/src/lib/constants/settings-config.ts
@@ -14,6 +14,7 @@ export const SETTING_CONFIG_DEFAULT: Record =
pdfAsImage: false,
disableAutoScroll: false,
renderUserContentAsMarkdown: false,
+ alwaysShowSidebarOnDesktop: false,
autoMicOnEmpty: false,
// make sure these default values are in sync with `common.h`
samplers: 'top_k;typ_p;top_p;min_p;temperature',
@@ -94,6 +95,8 @@ export const SETTING_CONFIG_INFO: Record = {
disableAutoScroll:
'Disable automatic scrolling while messages stream so you can control the viewport position manually.',
renderUserContentAsMarkdown: 'Render user messages using markdown formatting in the chat.',
+ alwaysShowSidebarOnDesktop:
+ 'Always keep the sidebar visible on desktop instead of auto-hiding it.',
autoMicOnEmpty:
'Automatically show microphone button instead of send button when textarea is empty for models with audio modality support.',
pyInterpreterEnabled:
diff --git a/tools/server/webui/src/routes/+layout.svelte b/tools/server/webui/src/routes/+layout.svelte
index 27dfac19c3e..1f92d6cc987 100644
--- a/tools/server/webui/src/routes/+layout.svelte
+++ b/tools/server/webui/src/routes/+layout.svelte
@@ -14,6 +14,7 @@
import { goto } from '$app/navigation';
import { modelsStore } from '$lib/stores/models.svelte';
import { TOOLTIP_DELAY_DURATION } from '$lib/constants/tooltip-config';
+ import { IsMobile } from '$lib/hooks/is-mobile.svelte';
let { children } = $props();
@@ -21,6 +22,9 @@
let isHomeRoute = $derived(page.route.id === '/');
let isNewChatMode = $derived(page.url.searchParams.get('new_chat') === 'true');
let showSidebarByDefault = $derived(activeMessages().length > 0 || isLoading());
+ let alwaysShowSidebarOnDesktop = $derived(config().alwaysShowSidebarOnDesktop);
+ const isMobile = new IsMobile();
+ let isDesktop = $derived(!isMobile.current);
let sidebarOpen = $state(false);
let innerHeight = $state();
let chatSidebar:
@@ -76,6 +80,11 @@
}
$effect(() => {
+ if (alwaysShowSidebarOnDesktop && isDesktop) {
+ sidebarOpen = true;
+ return;
+ }
+
if (isHomeRoute && !isNewChatMode) {
// Auto-collapse sidebar when navigating to home route (but not in new chat mode)
sidebarOpen = false;
@@ -190,12 +199,14 @@
-
+ {#if !(alwaysShowSidebarOnDesktop && isDesktop)}
+
+ {/if}
{@render children?.()}