diff --git a/backend/onyx/agents/agent_search/deep_search/initial/generate_sub_answers/nodes/decompose_orig_question.py b/backend/onyx/agents/agent_search/deep_search/initial/generate_sub_answers/nodes/decompose_orig_question.py index 5489a868320..0c2bb3d6354 100644 --- a/backend/onyx/agents/agent_search/deep_search/initial/generate_sub_answers/nodes/decompose_orig_question.py +++ b/backend/onyx/agents/agent_search/deep_search/initial/generate_sub_answers/nodes/decompose_orig_question.py @@ -110,6 +110,7 @@ def decompose_orig_question( ), writer, ) + # dispatches custom events for subquestion tokens, adding in subquestion ids. streamed_tokens = dispatch_separated( model.stream(msg), diff --git a/backend/onyx/agents/agent_search/shared_graph_utils/utils.py b/backend/onyx/agents/agent_search/shared_graph_utils/utils.py index 56aea3e29fe..e4539d50e5e 100644 --- a/backend/onyx/agents/agent_search/shared_graph_utils/utils.py +++ b/backend/onyx/agents/agent_search/shared_graph_utils/utils.py @@ -305,8 +305,10 @@ def dispatch_separated( if sep in content: sub_question_parts = content.split(sep) _dispatch_nonempty(sub_question_parts[0], dispatch_event, num) + if sep_callback: sep_callback(num) + num += 1 _dispatch_nonempty( "".join(sub_question_parts[1:]).strip(), dispatch_event, num @@ -315,6 +317,9 @@ def dispatch_separated( _dispatch_nonempty(content, dispatch_event, num) streamed_tokens.append(content) + if sep_callback: + sep_callback(num) + return streamed_tokens diff --git a/web/src/app/chat/interfaces.ts b/web/src/app/chat/interfaces.ts index c04ec15d21a..301239e4d35 100644 --- a/web/src/app/chat/interfaces.ts +++ b/web/src/app/chat/interfaces.ts @@ -218,6 +218,7 @@ export interface SubQuestionDetail extends BaseQuestionIdentifier { sub_queries?: SubQueryDetail[] | null; context_docs?: { top_documents: OnyxDocument[] } | null; is_complete?: boolean; + is_stopped?: boolean; } export interface SubQueryDetail { @@ -255,6 +256,7 @@ export const constructSubQuestions = ( ); if (subQuestion) { subQuestion.is_complete = true; + subQuestion.is_stopped = true; } } else if ("top_documents" in newDetail) { const { level, level_question_num, top_documents } = newDetail; diff --git a/web/src/app/chat/message/StreamingMessages.ts b/web/src/app/chat/message/StreamingMessages.ts index 66c72b9c5b5..7cd725cf4a7 100644 --- a/web/src/app/chat/message/StreamingMessages.ts +++ b/web/src/app/chat/message/StreamingMessages.ts @@ -134,7 +134,7 @@ export const useStreamingMessages = ( if (nextIndex <= sq.question.length) { dynSQ.question = sq.question.slice(0, nextIndex); p.questionCharIndex = nextIndex; - if (nextIndex >= sq.question.length) { + if (nextIndex >= sq.question.length && sq.is_stopped) { p.questionDone = true; } didStreamQuestion = true; diff --git a/web/src/app/chat/message/SubQuestionsDisplay.tsx b/web/src/app/chat/message/SubQuestionsDisplay.tsx index da7389f4913..55ca2754716 100644 --- a/web/src/app/chat/message/SubQuestionsDisplay.tsx +++ b/web/src/app/chat/message/SubQuestionsDisplay.tsx @@ -481,9 +481,7 @@ const SubQuestionsDisplay: React.FC = ({ subQuestions, () => {}, () => { - setTimeout(() => { - setShowSummarizing(true); - }, PHASE_MIN_MS * 3); + setShowSummarizing(true); } ); const { dynamicSubQuestions: dynamicSecondLevelQuestions } = @@ -549,20 +547,6 @@ const SubQuestionsDisplay: React.FC = ({ } }, [memoizedSubQuestions]); - useEffect(() => { - const allSubQuestionsAnswered = - memoizedSubQuestions.length > 0 && - memoizedSubQuestions.every( - (subQuestion) => subQuestion?.question.length > 5 - ); - - if (allSubQuestionsAnswered) { - setTimeout(() => { - setShowSummarizing(true); - }, PHASE_MIN_MS * 0.75); - } - }, [memoizedSubQuestions, finishedGenerating]); - useEffect(() => { if (showSummarizing && streamedText !== "Summarize findings") { const fullText = "Summarize findings";