fix sse js event

This commit is contained in:
team 1
2026-04-26 20:48:19 +02:00
parent 308e980b4a
commit edf6720940
2 changed files with 27 additions and 5 deletions

View File

@@ -0,0 +1,16 @@
# RetrieX SSE final think cleanup fix
This patch fixes a frontend finalization issue where the SSE stream could receive
`event: done` / `[DONE]`, but the last transient `.think` status such as
"Denke nach..." stayed visible.
The streaming renderer still keeps the latest `.think` block while the answer is
running. On final `done`, it now removes all transient `.think` blocks and also
removes the loader CSS class. This is a UI-only fix and does not change retrieval,
prompting, shop search, scoring, or SSE job logic.
Changed files:
- public/assets/js/base.js
After applying the patch, clear Symfony/browser asset cache as appropriate.

View File

@@ -232,11 +232,16 @@ document.addEventListener('DOMContentLoaded', () => {
return false;
}
function cleanupThinkSpans(container) {
function cleanupThinkSpans(container, final = false) {
if (!container) {
return;
}
if (final) {
removeThinkSpansOnly(container);
return;
}
const thinkSpans = Array.from(container.querySelectorAll('.think'));
if (thinkSpans.length === 0) {
@@ -254,9 +259,9 @@ document.addEventListener('DOMContentLoaded', () => {
removeThinkSpansOnly(container);
}
function renderBubbleContent(bubble, raw) {
function renderBubbleContent(bubble, raw, final = false) {
bubble.innerHTML = renderMarkdown(raw);
cleanupThinkSpans(bubble);
cleanupThinkSpans(bubble, final);
enhanceChatLinks(bubble);
scrollChatToBottom();
}
@@ -333,7 +338,8 @@ document.addEventListener('DOMContentLoaded', () => {
function finalizeStream(bubble, raw) {
clearScheduledRender();
renderBubbleContent(bubble, raw);
bubble.classList.remove('loader');
renderBubbleContent(bubble, raw, true);
}
async function releaseStreamResources() {
@@ -567,7 +573,7 @@ document.addEventListener('DOMContentLoaded', () => {
if (raw.trim() !== '') {
const formattedMessage = `<em>${userMessage}</em>`;
raw += raw.trim() === '' ? formattedMessage : `\n\n${formattedMessage}`;
renderBubbleContent(bubble, raw);
renderBubbleContent(bubble, raw, true);
} else {
bubble.innerHTML = `<em>${userMessage}</em>`;
enhanceChatLinks(bubble);