From 7d5fd3732484a6f86eeb0644c732dcea24d303f4 Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Wed, 31 Dec 2025 13:08:26 +0100 Subject: [PATCH] feat: Raw LLM output switch per message --- .../ChatMessages/ChatMessageActions.svelte | 23 ++++++++++++++++--- .../ChatMessages/ChatMessageAssistant.svelte | 10 ++++++-- .../app/chat/ChatSettings/ChatSettings.svelte | 2 +- .../src/lib/constants/settings-config.ts | 2 +- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageActions.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageActions.svelte index 3cb48157d8..dbd9b98228 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageActions.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageActions.svelte @@ -5,6 +5,7 @@ ChatMessageBranchingControls, DialogConfirmation } from '$lib/components/app'; + import { Switch } from '$lib/components/ui/switch'; interface Props { role: 'user' | 'assistant'; @@ -26,6 +27,9 @@ onConfirmDelete: () => void; onNavigateToSibling?: (siblingId: string) => void; onShowDeleteDialogChange: (show: boolean) => void; + showRawOutputSwitch?: boolean; + rawOutputEnabled?: boolean; + onRawOutputToggle?: (enabled: boolean) => void; } let { @@ -42,7 +46,10 @@ onRegenerate, role, siblingInfo = null, - showDeleteDialog + showDeleteDialog, + showRawOutputSwitch = false, + rawOutputEnabled = false, + onRawOutputToggle }: Props = $props(); function handleConfirmDelete() { @@ -51,9 +58,9 @@ } -
+
@@ -81,6 +88,16 @@
+ + {#if showRawOutputSwitch} +
+ Show raw output + onRawOutputToggle?.(checked)} + /> +
+ {/if}
') ?? false + messageContent?.includes('<<>>') ?? false ); const processingState = useProcessingState(); + // Local state for raw output toggle (per message) + let showRawOutput = $state(false); + let currentConfig = $derived(config()); let isRouter = $derived(isRouterMode()); let displayedModel = $derived((): string | null => { @@ -184,7 +187,7 @@ {:else if message.role === 'assistant'} - {#if config().disableReasoningFormat} + {#if showRawOutput}
{messageContent || ''}
{:else if isAgenticContent} @@ -258,6 +261,9 @@ {onConfirmDelete} {onNavigateToSibling} {onShowDeleteDialogChange} + showRawOutputSwitch={currentConfig.disableReasoningFormat} + rawOutputEnabled={showRawOutput} + onRawOutputToggle={(enabled) => (showRawOutput = enabled)} /> {/if} 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 9964c95fc3..10583b6e21 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 @@ -273,7 +273,7 @@ fields: [ { key: 'disableReasoningFormat', - label: 'Show raw LLM output', + label: 'Enable raw LLM output switch', 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 a100a6e69e..15d8a351f6 100644 --- a/tools/server/webui/src/lib/constants/settings-config.ts +++ b/tools/server/webui/src/lib/constants/settings-config.ts @@ -94,7 +94,7 @@ export const SETTING_CONFIG_INFO: Record = { custom: 'Custom JSON parameters to send to the API. Must be valid JSON format.', showThoughtInProgress: 'Expand thought process by default when generating messages.', disableReasoningFormat: - 'Show raw LLM output without backend parsing and frontend Markdown rendering to inspect streaming across different models.', + 'Enable raw LLM output switch to show unprocessed model output without backend parsing and frontend Markdown rendering to inspect streaming across different models.', keepStatsVisible: 'Keep processing statistics visible after generation finishes.', showMessageStats: 'Display generation statistics (tokens/second, token count, duration) below each assistant message.',