Skip to content

Commit e31b5c5

Browse files
authored
webui: Fix context available value in Multi-model Router mode (ggml-org#17804)
* fix: Use context size from `/props?model=...` in ROUTER mode * chore: update webui build output
1 parent 21f24f2 commit e31b5c5

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

tools/server/public/index.html.gz

-823 Bytes
Binary file not shown.

tools/server/webui/src/lib/stores/chat.svelte.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import { DatabaseService, ChatService } from '$lib/services';
22
import { conversationsStore } from '$lib/stores/conversations.svelte';
33
import { config } from '$lib/stores/settings.svelte';
44
import { contextSize, isRouterMode } from '$lib/stores/server.svelte';
5-
import { selectedModelName, modelsStore } from '$lib/stores/models.svelte';
5+
import {
6+
selectedModelName,
7+
modelsStore,
8+
selectedModelContextSize
9+
} from '$lib/stores/models.svelte';
610
import {
711
normalizeModelName,
812
filterByLeafNodeId,
@@ -261,6 +265,13 @@ class ChatStore {
261265
return activeState.contextTotal;
262266
}
263267

268+
if (isRouterMode()) {
269+
const modelContextSize = selectedModelContextSize();
270+
if (modelContextSize && modelContextSize > 0) {
271+
return modelContextSize;
272+
}
273+
}
274+
264275
const propsContextSize = contextSize();
265276
if (propsContextSize && propsContextSize > 0) {
266277
return propsContextSize;
@@ -458,6 +469,14 @@ class ChatStore {
458469
onError?: (error: Error) => void,
459470
modelOverride?: string | null
460471
): Promise<void> {
472+
// Ensure model props are cached before streaming (for correct n_ctx in processing info)
473+
if (isRouterMode()) {
474+
const modelName = modelOverride || selectedModelName();
475+
if (modelName && !modelsStore.getModelProps(modelName)) {
476+
await modelsStore.fetchModelProps(modelName);
477+
}
478+
}
479+
461480
let streamedContent = '';
462481
let streamedReasoningContent = '';
463482
let streamedToolCallContent = '';

tools/server/webui/src/lib/stores/models.svelte.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,22 @@ class ModelsStore {
158158
return this.modelPropsCache.get(modelId) ?? null;
159159
}
160160

161+
/**
162+
* Get context size (n_ctx) for a specific model from cached props
163+
*/
164+
getModelContextSize(modelId: string): number | null {
165+
const props = this.modelPropsCache.get(modelId);
166+
return props?.default_generation_settings?.n_ctx ?? null;
167+
}
168+
169+
/**
170+
* Get context size for the currently selected model or null if no model is selected
171+
*/
172+
get selectedModelContextSize(): number | null {
173+
if (!this.selectedModelName) return null;
174+
return this.getModelContextSize(this.selectedModelName);
175+
}
176+
161177
/**
162178
* Check if props are being fetched for a model
163179
*/
@@ -579,3 +595,4 @@ export const loadedModelIds = () => modelsStore.loadedModelIds;
579595
export const loadingModelIds = () => modelsStore.loadingModelIds;
580596
export const propsCacheVersion = () => modelsStore.propsCacheVersion;
581597
export const singleModelName = () => modelsStore.singleModelName;
598+
export const selectedModelContextSize = () => modelsStore.selectedModelContextSize;

0 commit comments

Comments
 (0)