mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-28 02:22:26 +08:00
fix the duplicated...messages through the websocket?
This commit is contained in:
parent
3bddb60ecc
commit
aadb8cce5d
@ -142,8 +142,13 @@ export async function setupStreamingResponse(
|
||||
|
||||
console.log(`[${responseId}] Received content chunk of length ${message.content.length}, preview: "${message.content.substring(0, 50)}${message.content.length > 50 ? '...' : ''}"`);
|
||||
|
||||
// Check if this is a duplicated message containing the same content we already have
|
||||
if (message.done && assistantResponse.includes(message.content)) {
|
||||
console.log(`[${responseId}] Ignoring duplicated content in done message`);
|
||||
} else {
|
||||
// Add to our accumulated response
|
||||
assistantResponse += message.content;
|
||||
}
|
||||
|
||||
// Update the UI immediately with each chunk
|
||||
onContentUpdate(assistantResponse, false);
|
||||
@ -228,25 +233,21 @@ export async function setupStreamingResponse(
|
||||
timeoutId = null;
|
||||
}
|
||||
|
||||
// Check if we have content in the done message
|
||||
if (message.content) {
|
||||
// Check if we have content in the done message - ONLY process if we haven't received any content yet
|
||||
if (message.content && !receivedAnyContent) {
|
||||
console.log(`[${responseId}] Processing content in done message: ${message.content.length} chars`);
|
||||
receivedAnyContent = true;
|
||||
|
||||
// Replace current response if we didn't have content before or if it's empty
|
||||
if (assistantResponse.length === 0) {
|
||||
// Use content from done message as full response
|
||||
console.log(`[${responseId}] Using content from done message as full response`);
|
||||
assistantResponse = message.content;
|
||||
}
|
||||
// Otherwise append it if it's different
|
||||
else if (message.content !== assistantResponse) {
|
||||
console.log(`[${responseId}] Appending content from done message to existing response`);
|
||||
assistantResponse += message.content;
|
||||
}
|
||||
else {
|
||||
console.log(`[${responseId}] Content in done message is identical to existing response, not appending`);
|
||||
}
|
||||
|
||||
onContentUpdate(assistantResponse, true);
|
||||
} else if (message.content) {
|
||||
// We already have content, signal as done but don't duplicate
|
||||
console.log(`[${responseId}] Content in done message ignored as we already have streamed content`);
|
||||
onContentUpdate(assistantResponse, true);
|
||||
} else {
|
||||
// No content in done message, just mark as done
|
||||
onContentUpdate(assistantResponse, true);
|
||||
}
|
||||
|
||||
|
@ -544,11 +544,8 @@ class RestChatService {
|
||||
if (done) {
|
||||
streamFinished = true;
|
||||
|
||||
// Always send the accumulated content with the done=true message
|
||||
// This ensures the client receives the complete content even if earlier messages were missed
|
||||
message.content = messageContent;
|
||||
|
||||
log.info(`Stream complete, sending final message with ${messageContent.length} chars of content`);
|
||||
// Don't send another "done:true" message here - we'll let the streaming handler
|
||||
// handle the completion notification with its own done:true message
|
||||
|
||||
// Store the response in the session when done
|
||||
session.messages.push({
|
||||
@ -1358,15 +1355,15 @@ class RestChatService {
|
||||
// Only send final done message if it wasn't already sent with content
|
||||
// This ensures we don't duplicate the content but still mark completion
|
||||
if (!chunk.text) {
|
||||
// Send final message with both content and done flag together
|
||||
log.info(`No content in final chunk, sending explicit completion message`);
|
||||
|
||||
// Send final message with done flag only (no content)
|
||||
// This avoids sending the entire messageContent again and causing duplicates
|
||||
wsService.sendMessageToAllClients({
|
||||
type: 'llm-stream',
|
||||
sessionId,
|
||||
content: messageContent, // Send the accumulated content
|
||||
done: true
|
||||
} as LLMStreamMessage);
|
||||
|
||||
log.info(`Sent explicit final completion message with accumulated content`);
|
||||
} else {
|
||||
log.info(`Final done flag was already sent with content chunk, no need for extra message`);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user