Skip to content

Commit 49063d1

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 bebb034 commit 49063d1

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
@@ -83,8 +83,8 @@
8383
let displayedModel = $derived((): string | null => {
8484
if (!currentConfig.showModelInfo) return null;
8585
86-
if (currentConfig.modelSelectorEnabled) {
87-
return message.model ?? null;
86+
if (message.model) {
87+
return message.model;
8888
}
8989
9090
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
@@ -368,6 +368,8 @@ class ChatStore {
368368
const PROPS_REFRESH_RETRY_DELAY_MS = 1_000;
369369
let serverPropsRefreshRequested = false;
370370
let lastPropsRefreshAttempt = 0;
371+
const currentConfig = config();
372+
const preferServerPropsModel = !currentConfig.modelSelectorEnabled;
371373

372374
const resetPropsRefreshGate = (options?: { immediate?: boolean }) => {
373375
serverPropsRefreshRequested = false;
@@ -431,10 +433,19 @@ class ChatStore {
431433
});
432434
};
433435

434-
const recordModel = (modelName: string, persistImmediately = true): void => {
436+
const recordModel = (modelName: string | null | undefined, persistImmediately = true): void => {
435437
ensureServerPropsRefresh();
436438

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

439450
if (!normalizedModel || normalizedModel === resolvedModel) {
440451
return;
@@ -458,6 +469,31 @@ class ChatStore {
458469
}
459470
};
460471

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

0 commit comments

Comments
 (0)