fix(web-search): Text-Bubbles nach Web-Search zu einer Bubble zusammenführen

- history.js: _mergeConsecutiveAssistantTexts überspringt web_search_result
  Messages beim Suchen des vorherigen Text-Blocks, sodass Text vor und
  nach einer Web-Search in der History als eine Bubble gerendert wird
- Text-Blöcke werden mit doppeltem Zeilenumbruch statt Leerzeichen
  zusammengefügt (besseres Markdown-Rendering)
- chat.css: web_search Tool-Box von Opacity-Regel ausgenommen
This commit is contained in:
Meleki committed 2026-03-07 10:06:23 +01:00
1 parent f64052caf4
commit d81dab635a
2 files changed
+10 -5

No files matched your search

+1 -1
View File
@@ -151,7 +151,7 @@
padding: 0; 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); opacity: var(--semi-transparent);
} }
+9 -4
View File
@@ -156,13 +156,18 @@ function _mergeConsecutiveAssistantTexts(msgs) {
const result = []; const result = [];
for (const msg of msgs) { for (const msg of msgs) {
if (msg.type === 'text' && msg.role === 'assistant') { 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 isReview = msg.content && (msg.content.startsWith('[Review:') || msg.content.startsWith('[Finalizer:'));
const prevIsReview = prev && prev.content && (prev.content.startsWith('[Review:') || prev.content.startsWith('[Finalizer:')); const prevIsReview = prev && prev.content && (prev.content.startsWith('[Review:') || prev.content.startsWith('[Finalizer:'));
if (prev && prev.type === 'text' && prev.role === 'assistant' if (prev && prev.iteration === msg.iteration && !isReview && !prevIsReview) {
&& prev.iteration === msg.iteration && !isReview && !prevIsReview) {
// Gleiche Iteration: nahtlos zusammenfügen (Web-Search-Fragmente etc.) // 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.) // IDs/Timestamps: letztes behalten (für Mark-Button etc.)
if (msg.id) prev.id = msg.id; if (msg.id) prev.id = msg.id;
if (msg.createdAt) prev.createdAt = msg.createdAt; if (msg.createdAt) prev.createdAt = msg.createdAt;