diff --git a/frontend/src/components/chat/AssistantMessage.test.tsx b/frontend/src/components/chat/AssistantMessage.test.tsx index fff4701cb..aa1df0edb 100644 --- a/frontend/src/components/chat/AssistantMessage.test.tsx +++ b/frontend/src/components/chat/AssistantMessage.test.tsx @@ -636,6 +636,17 @@ describe('AssistantMessage', () => { // 测试里的 selector 不订阅 store,换一个 message 引用触发重渲染。 rerender(); expect(screen.getByTestId('suggested-questions')).toBeInTheDocument(); + + // ready 事件先于封口到达,流结束前推荐区不能消失。 + rerender( + , + ); + expect(screen.getByTestId('suggested-questions')).toBeInTheDocument(); streamSlotState.byConversation = {}; }); }); diff --git a/frontend/src/components/chat/AssistantMessage.tsx b/frontend/src/components/chat/AssistantMessage.tsx index 0c8b35d01..d1b66fc80 100644 --- a/frontend/src/components/chat/AssistantMessage.tsx +++ b/frontend/src/components/chat/AssistantMessage.tsx @@ -210,8 +210,9 @@ function AssistantMessageFrame({ const slot = selectStreamSlot(state, conversationId); return slot.displayedTextLength >= slot.totalTextLength; }); + // ready 事件在封口前就会到达,状态从 pending 变 ready 后也要继续显示到流结束,否则会闪一下。 const awaitingSuggestedQuestions = isStreaming - && message.suggestedQuestionsStatus === 'pending' + && (message.suggestedQuestionsStatus === 'pending' || message.suggestedQuestionsStatus === 'ready') && streamTextCaughtUp; const answerEvidenceSidebar = useMemo(