diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz
index 3892773668..a9dba62abe 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/stores/chat.svelte.ts b/tools/server/webui/src/lib/stores/chat.svelte.ts
index dd6b77e71a..167f24288f 100644
--- a/tools/server/webui/src/lib/stores/chat.svelte.ts
+++ b/tools/server/webui/src/lib/stores/chat.svelte.ts
@@ -2,7 +2,11 @@ import { DatabaseService, ChatService } from '$lib/services';
import { conversationsStore } from '$lib/stores/conversations.svelte';
import { config } from '$lib/stores/settings.svelte';
import { contextSize, isRouterMode } from '$lib/stores/server.svelte';
-import { selectedModelName, modelsStore } from '$lib/stores/models.svelte';
+import {
+ selectedModelName,
+ modelsStore,
+ selectedModelContextSize
+} from '$lib/stores/models.svelte';
import {
normalizeModelName,
filterByLeafNodeId,
@@ -261,6 +265,13 @@ class ChatStore {
return activeState.contextTotal;
}
+ if (isRouterMode()) {
+ const modelContextSize = selectedModelContextSize();
+ if (modelContextSize && modelContextSize > 0) {
+ return modelContextSize;
+ }
+ }
+
const propsContextSize = contextSize();
if (propsContextSize && propsContextSize > 0) {
return propsContextSize;
@@ -458,6 +469,14 @@ class ChatStore {
onError?: (error: Error) => void,
modelOverride?: string | null
): Promise {
+ // Ensure model props are cached before streaming (for correct n_ctx in processing info)
+ if (isRouterMode()) {
+ const modelName = modelOverride || selectedModelName();
+ if (modelName && !modelsStore.getModelProps(modelName)) {
+ await modelsStore.fetchModelProps(modelName);
+ }
+ }
+
let streamedContent = '';
let streamedReasoningContent = '';
let streamedToolCallContent = '';
diff --git a/tools/server/webui/src/lib/stores/models.svelte.ts b/tools/server/webui/src/lib/stores/models.svelte.ts
index 2e834af5a0..29416c2fe5 100644
--- a/tools/server/webui/src/lib/stores/models.svelte.ts
+++ b/tools/server/webui/src/lib/stores/models.svelte.ts
@@ -158,6 +158,22 @@ class ModelsStore {
return this.modelPropsCache.get(modelId) ?? null;
}
+ /**
+ * Get context size (n_ctx) for a specific model from cached props
+ */
+ getModelContextSize(modelId: string): number | null {
+ const props = this.modelPropsCache.get(modelId);
+ return props?.default_generation_settings?.n_ctx ?? null;
+ }
+
+ /**
+ * Get context size for the currently selected model or null if no model is selected
+ */
+ get selectedModelContextSize(): number | null {
+ if (!this.selectedModelName) return null;
+ return this.getModelContextSize(this.selectedModelName);
+ }
+
/**
* Check if props are being fetched for a model
*/
@@ -579,3 +595,4 @@ export const loadedModelIds = () => modelsStore.loadedModelIds;
export const loadingModelIds = () => modelsStore.loadingModelIds;
export const propsCacheVersion = () => modelsStore.propsCacheVersion;
export const singleModelName = () => modelsStore.singleModelName;
+export const selectedModelContextSize = () => modelsStore.selectedModelContextSize;