onError?: (error: Error) => void
): Promise<void> {
let streamedContent = '';
-
let streamedReasoningContent = '';
+ let modelCaptured = false;
+
+ const captureModelIfNeeded = (updateDbImmediately = true): string | undefined => {
+ if (!modelCaptured) {
+ const currentModelName = serverStore.modelName;
+
+ if (currentModelName) {
+ if (updateDbImmediately) {
+ DatabaseStore.updateMessage(assistantMessage.id, { model: currentModelName }).catch(
+ console.error
+ );
+ }
+
+ const messageIndex = this.findMessageIndex(assistantMessage.id);
+
+ this.updateMessageAtIndex(messageIndex, { model: currentModelName });
+ modelCaptured = true;
+
+ return currentModelName;
+ }
+ }
+ return undefined;
+ };
slotsService.startStreaming();
streamedContent += chunk;
this.currentResponse = streamedContent;
+ captureModelIfNeeded();
+
const partialThinking = extractPartialThinking(streamedContent);
const messageIndex = this.findMessageIndex(assistantMessage.id);
this.updateMessageAtIndex(messageIndex, {
onReasoningChunk: (reasoningChunk: string) => {
streamedReasoningContent += reasoningChunk;
+
+ captureModelIfNeeded();
+
const messageIndex = this.findMessageIndex(assistantMessage.id);
+
this.updateMessageAtIndex(messageIndex, { thinking: streamedReasoningContent });
},
) => {
slotsService.stopStreaming();
- await DatabaseStore.updateMessage(assistantMessage.id, {
+ const updateData: {
+ content: string;
+ thinking: string;
+ timings?: ChatMessageTimings;
+ model?: string;
+ } = {
content: finalContent || streamedContent,
thinking: reasoningContent || streamedReasoningContent,
timings: timings
- });
+ };
+
+ const capturedModel = captureModelIfNeeded(false);
+
+ if (capturedModel) {
+ updateData.model = capturedModel;
+ }
+
+ await DatabaseStore.updateMessage(assistantMessage.id, updateData);
const messageIndex = this.findMessageIndex(assistantMessage.id);
- this.updateMessageAtIndex(messageIndex, {
+ const localUpdateData: { timings?: ChatMessageTimings; model?: string } = {
timings: timings
- });
+ };
+
+ if (updateData.model) {
+ localUpdateData.model = updateData.model;
+ }
+
+ this.updateMessageAtIndex(messageIndex, localUpdateData);
await DatabaseStore.updateCurrentNode(this.activeConversation!.id, assistantMessage.id);
this.activeConversation!.currNode = assistantMessage.id;
private async createAssistantMessage(parentId?: string): Promise<DatabaseMessage | null> {
if (!this.activeConversation) return null;
- // Capture the current model name when creating the assistant message
- const currentModelName = serverStore.modelName;
-
return await DatabaseStore.createMessageBranch(
{
convId: this.activeConversation.id,
content: '',
timestamp: Date.now(),
thinking: '',
- children: [],
- model: currentModelName || undefined
+ children: []
},
parentId || null
);
this.isLoading = true;
this.currentResponse = '';
- // Capture the current model name when creating the assistant message
- const currentModelName = serverStore.modelName;
-
const newAssistantMessage = await DatabaseStore.createMessageBranch(
{
convId: this.activeConversation.id,
role: 'assistant',
content: '',
thinking: '',
- children: [],
- model: currentModelName || undefined
+ children: []
},
parentMessage.id
);
false
) as DatabaseMessage[];
- // Capture the current model name when creating the assistant message
- const currentModelName = serverStore.modelName;
-
// Create new assistant message branch
const assistantMessage = await DatabaseStore.createMessageBranch(
{
role: 'assistant',
content: '',
thinking: '',
- children: [],
- model: currentModelName || undefined
+ children: []
},
userMessageId
);