diff --git a/wwwroot/css/chat.css b/wwwroot/css/chat.css index 64c5e4e..9a0bd08 100644 --- a/wwwroot/css/chat.css +++ b/wwwroot/css/chat.css @@ -151,7 +151,7 @@ padding: 0; } -.tool-box:has([hidden]):not(:has(.todo-list)) { +.tool-box:not([data-tool-name="web_search"]):has([hidden]):not(:has(.todo-list)) { opacity: var(--semi-transparent); } diff --git a/wwwroot/js/history.js b/wwwroot/js/history.js index 6303333..6ed94f0 100644 --- a/wwwroot/js/history.js +++ b/wwwroot/js/history.js @@ -156,13 +156,18 @@ function _mergeConsecutiveAssistantTexts(msgs) { const result = []; for (const msg of msgs) { if (msg.type === 'text' && msg.role === 'assistant') { - const prev = result[result.length - 1]; + // Finde den letzten assistant-text in result (überspringe web_search_result dazwischen) + var prev = null; + for (var i = result.length - 1; i >= 0; i--) { + if (result[i].type === 'web_search_result') continue; // Web-Search-Ergebnisse überspringen + if (result[i].type === 'text' && result[i].role === 'assistant') prev = result[i]; + break; + } const isReview = msg.content && (msg.content.startsWith('[Review:') || msg.content.startsWith('[Finalizer:')); const prevIsReview = prev && prev.content && (prev.content.startsWith('[Review:') || prev.content.startsWith('[Finalizer:')); - if (prev && prev.type === 'text' && prev.role === 'assistant' - && prev.iteration === msg.iteration && !isReview && !prevIsReview) { + if (prev && prev.iteration === msg.iteration && !isReview && !prevIsReview) { // Gleiche Iteration: nahtlos zusammenfügen (Web-Search-Fragmente etc.) - prev.content = (prev.content || '') + ' ' + (msg.content || ''); + prev.content = (prev.content || '') + '\n\n' + (msg.content || ''); // IDs/Timestamps: letztes behalten (für Mark-Button etc.) if (msg.id) prev.id = msg.id; if (msg.createdAt) prev.createdAt = msg.createdAt;