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;