Add files via upload

This commit is contained in:
公明 authored and GitHub committed 2026-06-29 16:57:32 +08:00
1 parent 89c275269f
commit 8f9d2f381a
1 file changed
+25 -5
+25 -5
View File
@@ -172,6 +172,24 @@ function einoMainStreamPlanningTitle(responseData) {
return prefix + '📝 ' + plan; return prefix + '📝 ' + plan;
} }
/**
* Eino 未捕获助手正文占位文案;终态 response 不应覆盖已有流式 buffer。
*/
function isEinoEmptyResponsePlaceholder(text) {
if (text == null) return false;
const s = String(text);
return s.indexOf('no assistant text was captured') !== -1
|| s.indexOf('未捕获到助手文本输出') !== -1;
}
function resolveFinalAssistantResponseText(finalMessage, streamState) {
const buf = streamState && streamState.buffer != null ? String(streamState.buffer).trim() : '';
if (isEinoEmptyResponsePlaceholder(finalMessage) && buf) {
return streamState.buffer;
}
return finalMessage;
}
/** /**
* 主通道 response 结束时:将流式占位条目固化为 planning(与后端 flushResponsePlan 落库类型一致), * 主通道 response 结束时:将流式占位条目固化为 planning(与后端 flushResponsePlan 落库类型一致),
* 避免 integrateProgressToMCPSection 快照前删除占位导致「助手输出」仅刷新后才出现。 * 避免 integrateProgressToMCPSection 快照前删除占位导致「助手输出」仅刷新后才出现。
@@ -181,8 +199,9 @@ function finalizeMainResponseStreamItem(streamState, finalMessage, responseData)
const item = document.getElementById(streamState.itemId); const item = document.getElementById(streamState.itemId);
if (!item || !item.parentNode) return false; if (!item || !item.parentNode) return false;
const fullText = (finalMessage != null && String(finalMessage).trim() !== '') const resolved = resolveFinalAssistantResponseText(finalMessage, streamState);
? String(finalMessage) const fullText = (resolved != null && String(resolved).trim() !== '')
? String(resolved)
: (streamState.buffer || ''); : (streamState.buffer || '');
if (!String(fullText).trim()) { if (!String(fullText).trim()) {
item.parentNode.removeChild(item); item.parentNode.removeChild(item);
@@ -2414,19 +2433,20 @@ function handleStreamEvent(event, progressElement, progressId,
const streamState = responseStreamStateByProgressId.get(progressId); const streamState = responseStreamStateByProgressId.get(progressId);
const existingAssistantId = streamState?.assistantId || getAssistantId(); const existingAssistantId = streamState?.assistantId || getAssistantId();
let assistantIdFinal = existingAssistantId; let assistantIdFinal = existingAssistantId;
const bubbleText = resolveFinalAssistantResponseText(event.message, streamState);
if (!assistantIdFinal) { if (!assistantIdFinal) {
assistantIdFinal = addMessage('assistant', event.message, mcpIds, progressId); assistantIdFinal = addMessage('assistant', bubbleText, mcpIds, progressId);
setAssistantId(assistantIdFinal); setAssistantId(assistantIdFinal);
} else { } else {
setAssistantId(assistantIdFinal); setAssistantId(assistantIdFinal);
updateAssistantBubbleContent(assistantIdFinal, event.message, true); updateAssistantBubbleContent(assistantIdFinal, bubbleText, true);
} }
// 将 response_start/response_delta 占位固化为 planning,与后端落库一致后再快照过程详情 // 将 response_start/response_delta 占位固化为 planning,与后端落库一致后再快照过程详情
if (streamState && streamState.itemId) { if (streamState && streamState.itemId) {
finalizeMainResponseStreamItem(streamState, event.message, responseData); finalizeMainResponseStreamItem(streamState, event.message, responseData);
} else if (event.message && String(event.message).trim()) { } else if (bubbleText && String(bubbleText).trim() && !isEinoEmptyResponsePlaceholder(event.message)) {
addTimelineItem(timeline, 'planning', { addTimelineItem(timeline, 'planning', {
title: typeof einoMainStreamPlanningTitle === 'function' title: typeof einoMainStreamPlanningTitle === 'function'
? einoMainStreamPlanningTitle(responseData) ? einoMainStreamPlanningTitle(responseData)