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/components/app/server/ServerStatus.svelte b/tools/server/webui/src/lib/components/app/server/ServerStatus.svelte
index d9f6d4a32a..86a962de12 100644
--- a/tools/server/webui/src/lib/components/app/server/ServerStatus.svelte
+++ b/tools/server/webui/src/lib/components/app/server/ServerStatus.svelte
@@ -48,7 +48,7 @@
{model || 'Unknown Model'}
- {#if serverData.default_generation_settings.n_ctx}
+ {#if serverData?.default_generation_settings?.n_ctx}
ctx: {serverData.default_generation_settings.n_ctx.toLocaleString()}
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 b8d4616d0e..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
@@ -147,7 +147,11 @@ export function useProcessingState(): UseProcessingStateReturn {
}
// 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(
@@ -193,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 {
diff --git a/tools/server/webui/src/lib/types/api.d.ts b/tools/server/webui/src/lib/types/api.d.ts
index b73fe4acb9..307e3b71d9 100644
--- a/tools/server/webui/src/lib/types/api.d.ts
+++ b/tools/server/webui/src/lib/types/api.d.ts
@@ -351,7 +351,7 @@ export interface ApiProcessingState {
tokensDecoded: number;
tokensRemaining: number;
contextUsed: number;
- contextTotal: number;
+ contextTotal: number | null;
outputTokensUsed: number; // Total output tokens (thinking + regular content)
outputTokensMax: number; // Max output tokens allowed
temperature: number;