Skip to content

Commit aa940b5

Browse files
fix: restore proper legacy behavior in webui by using unified /props refresh
Updated assistant message bubbles to show each message's stored model when available, falling back to the current server model only when the per-message value is missing When the model selector is disabled, now fetches /props and prioritizes that model name over chunk metadata, then persists it with the streamed message so legacy mode properly reflects the backend configuration
1 parent e1a9321 commit aa940b5

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAssistant.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@
7676
let displayedModel = $derived((): string | null => {
7777
if (!currentConfig.showModelInfo) return null;
7878
79-
if (currentConfig.modelSelectorEnabled) {
80-
return message.model ?? null;
79+
if (message.model) {
80+
return message.model;
8181
}
8282
8383
return serverModel;

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

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,8 @@ class ChatStore {
366366
const PROPS_REFRESH_RETRY_DELAY_MS = 1_000;
367367
let serverPropsRefreshRequested = false;
368368
let lastPropsRefreshAttempt = 0;
369+
const currentConfig = config();
370+
const preferServerPropsModel = !currentConfig.modelSelectorEnabled;
369371

370372
const resetPropsRefreshGate = (options?: { immediate?: boolean }) => {
371373
serverPropsRefreshRequested = false;
@@ -429,10 +431,19 @@ class ChatStore {
429431
});
430432
};
431433

432-
const recordModel = (modelName: string, persistImmediately = true): void => {
434+
const recordModel = (modelName: string | null | undefined, persistImmediately = true): void => {
433435
ensureServerPropsRefresh();
434436

435-
const normalizedModel = normalizeModelName(modelName);
437+
const serverModelName = serverStore.modelName;
438+
const preferredModelSource = preferServerPropsModel
439+
? (serverModelName ?? modelName ?? null)
440+
: (modelName ?? serverModelName ?? null);
441+
442+
if (!preferredModelSource) {
443+
return;
444+
}
445+
446+
const normalizedModel = normalizeModelName(preferredModelSource);
436447

437448
if (!normalizedModel || normalizedModel === resolvedModel) {
438449
return;
@@ -456,6 +467,31 @@ class ChatStore {
456467
}
457468
};
458469

470+
if (preferServerPropsModel) {
471+
const hasExistingProps = serverStore.serverProps !== null;
472+
473+
const updateModelFromServerProps = (persistImmediately = true) => {
474+
const currentServerModel = serverStore.modelName;
475+
476+
if (!currentServerModel) {
477+
return;
478+
}
479+
480+
recordModel(currentServerModel, persistImmediately);
481+
};
482+
483+
updateModelFromServerProps(false);
484+
485+
serverStore
486+
.fetchServerProps({ silent: hasExistingProps })
487+
.then(() => {
488+
updateModelFromServerProps(true);
489+
})
490+
.catch((error) => {
491+
console.warn('Failed to fetch server props before streaming:', error);
492+
});
493+
}
494+
459495
slotsService.startStreaming();
460496
slotsService.setActiveConversation(assistantMessage.convId);
461497

0 commit comments

Comments
 (0)