From 6d0c86f8b4d2bae1cf8c81b3efe8dedc2869dfbc Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Fri, 6 Feb 2026 14:54:26 +0100 Subject: [PATCH] fix: Context info fixes & improvements --- .../app/dialogs/DialogChatError.svelte | 7 ++++++- .../app/dialogs/DialogModelInformation.svelte | 21 +++++++++++++------ .../src/lib/constants/default-context.ts | 1 - .../lib/hooks/use-processing-state.svelte.ts | 6 +++++- .../webui/src/lib/stores/chat.svelte.ts | 18 +++++++++------- .../webui/src/lib/stores/models.svelte.ts | 4 +++- .../webui/src/lib/stores/server.svelte.ts | 4 +++- 7 files changed, 43 insertions(+), 18 deletions(-) delete mode 100644 tools/server/webui/src/lib/constants/default-context.ts diff --git a/tools/server/webui/src/lib/components/app/dialogs/DialogChatError.svelte b/tools/server/webui/src/lib/components/app/dialogs/DialogChatError.svelte index 4e0e11317a..54a3c90d3c 100644 --- a/tools/server/webui/src/lib/components/app/dialogs/DialogChatError.svelte +++ b/tools/server/webui/src/lib/components/app/dialogs/DialogChatError.svelte @@ -59,7 +59,12 @@ Prompt tokens: {contextInfo.n_prompt_tokens.toLocaleString()}

-

Context size: {contextInfo.n_ctx.toLocaleString()}

+ {#if contextInfo.n_ctx} +

+ Context size: + {contextInfo.n_ctx.toLocaleString()} +

+ {/if} {/if} diff --git a/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte b/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte index fdf02ed1c2..25d8a55748 100644 --- a/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte +++ b/tools/server/webui/src/lib/components/app/dialogs/DialogModelInformation.svelte @@ -105,12 +105,21 @@ - - Context Size - {formatNumber(serverProps.default_generation_settings.n_ctx)} tokens - + {#if serverProps?.default_generation_settings?.n_ctx} + + Context Size + {formatNumber(serverProps.default_generation_settings.n_ctx)} tokens + + {:else} + + Context Size + Not available + + {/if} {#if modelMeta?.n_ctx_train} diff --git a/tools/server/webui/src/lib/constants/default-context.ts b/tools/server/webui/src/lib/constants/default-context.ts deleted file mode 100644 index 78f31116e3..0000000000 --- a/tools/server/webui/src/lib/constants/default-context.ts +++ /dev/null @@ -1 +0,0 @@ -export const DEFAULT_CONTEXT = 4096; diff --git a/tools/server/webui/src/lib/hooks/use-processing-state.svelte.ts b/tools/server/webui/src/lib/hooks/use-processing-state.svelte.ts index d23edb5677..1205d9b973 100644 --- a/tools/server/webui/src/lib/hooks/use-processing-state.svelte.ts +++ b/tools/server/webui/src/lib/hooks/use-processing-state.svelte.ts @@ -197,7 +197,11 @@ export function useProcessingState(): UseProcessingStateReturn { const details: string[] = []; // Always show context info when we have valid data - if (stateToUse.contextUsed >= 0 && stateToUse.contextTotal > 0) { + if ( + typeof stateToUse.contextTotal === 'number' && + stateToUse.contextUsed >= 0 && + stateToUse.contextTotal > 0 + ) { const contextPercent = Math.round((stateToUse.contextUsed / stateToUse.contextTotal) * 100); details.push( diff --git a/tools/server/webui/src/lib/stores/chat.svelte.ts b/tools/server/webui/src/lib/stores/chat.svelte.ts index 7bb5e3b5f4..dc21d9444b 100644 --- a/tools/server/webui/src/lib/stores/chat.svelte.ts +++ b/tools/server/webui/src/lib/stores/chat.svelte.ts @@ -30,7 +30,6 @@ import { findLeafNode, isAbortError } from '$lib/utils'; -import { DEFAULT_CONTEXT } from '$lib/constants/default-context'; import { SYSTEM_MESSAGE_PLACEHOLDER } from '$lib/constants/ui'; import { REASONING_TAGS } from '$lib/constants/agentic'; import { @@ -1252,17 +1251,22 @@ class ChatStore { } } - private getContextTotal(): number { + private getContextTotal(): number | null { const activeConvId = this.activeConversationId; const activeState = activeConvId ? this.getProcessingState(activeConvId) : null; - if (activeState && activeState.contextTotal > 0) return activeState.contextTotal; + + if (activeState && typeof activeState.contextTotal === 'number' && activeState.contextTotal > 0) + return activeState.contextTotal; + if (isRouterMode()) { const modelContextSize = selectedModelContextSize(); - if (modelContextSize && modelContextSize > 0) return modelContextSize; + if (typeof modelContextSize === 'number' && modelContextSize > 0) return modelContextSize; + } else { + const propsContextSize = contextSize(); + if (typeof propsContextSize === 'number' && propsContextSize > 0) return propsContextSize; } - const propsContextSize = contextSize(); - if (propsContextSize && propsContextSize > 0) return propsContextSize; - return DEFAULT_CONTEXT; + + return null; } updateProcessingStateFromTimings( diff --git a/tools/server/webui/src/lib/stores/models.svelte.ts b/tools/server/webui/src/lib/stores/models.svelte.ts index 6451f6df84..4cb6167220 100644 --- a/tools/server/webui/src/lib/stores/models.svelte.ts +++ b/tools/server/webui/src/lib/stores/models.svelte.ts @@ -178,7 +178,9 @@ class ModelsStore { */ getModelContextSize(modelId: string): number | null { const props = this.getModelProps(modelId); - return props?.default_generation_settings?.n_ctx ?? null; + const nCtx = props?.default_generation_settings?.n_ctx; + + return typeof nCtx === 'number' ? nCtx : null; } /** diff --git a/tools/server/webui/src/lib/stores/server.svelte.ts b/tools/server/webui/src/lib/stores/server.svelte.ts index 47328a0adc..48874bf1b7 100644 --- a/tools/server/webui/src/lib/stores/server.svelte.ts +++ b/tools/server/webui/src/lib/stores/server.svelte.ts @@ -45,7 +45,9 @@ class ServerStore { } get contextSize(): number | null { - return this.props?.default_generation_settings?.n_ctx ?? null; + const nCtx = this.props?.default_generation_settings?.n_ctx; + + return typeof nCtx === 'number' ? nCtx : null; } get webuiSettings(): Record | undefined {