Skip to content

Commit fa2cb22

Browse files
authored
fix: After sending the message for the first time, the returned content is not streamed out infiniflow#2067 infiniflow#1832 (infiniflow#2191)
### What problem does this PR solve? fix: After sending the message for the first time, the returned content is not streamed out infiniflow#2067 infiniflow#1832 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)
1 parent bcfac56 commit fa2cb22

File tree

2 files changed

+13
-127
lines changed

2 files changed

+13
-127
lines changed

web/src/hooks/logic-hooks.ts

+2
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,11 @@ export const useSendMessageWithSse = (
264264
}
265265
console.info('done?');
266266
setDone(true);
267+
setAnswer({} as IAnswer);
267268
return { data: await res, response };
268269
} catch (e) {
269270
setDone(true);
271+
setAnswer({} as IAnswer);
270272
console.warn(e);
271273
}
272274
},

web/src/pages/chat/hooks.ts

+11-127
Original file line numberDiff line numberDiff line change
@@ -472,130 +472,6 @@ export const useHandleMessageInputChange = () => {
472472
};
473473
};
474474

475-
export const useSendMessage = (
476-
conversation: IClientConversation,
477-
addNewestConversation: (message: Message, answer?: string) => void,
478-
removeLatestMessage: () => void,
479-
addNewestAnswer: (answer: IAnswer) => void,
480-
removeMessagesAfterCurrentMessage: (messageId: string) => void,
481-
) => {
482-
const { setConversation } = useSetConversation();
483-
const { conversationId } = useGetChatSearchParams();
484-
const { handleInputChange, value, setValue } = useHandleMessageInputChange();
485-
486-
const { handleClickConversation } = useClickConversationCard();
487-
const { send, answer, done, setDone } = useSendMessageWithSse();
488-
489-
const sendMessage = useCallback(
490-
async ({
491-
message,
492-
currentConversationId,
493-
messages,
494-
}: {
495-
message: Message;
496-
currentConversationId?: string;
497-
messages?: Message[];
498-
}) => {
499-
const res = await send({
500-
conversation_id: currentConversationId ?? conversationId,
501-
messages: [...(messages ?? conversation?.message ?? []), message],
502-
});
503-
504-
if (res && (res?.response.status !== 200 || res?.data?.retcode !== 0)) {
505-
// cancel loading
506-
setValue(message.content);
507-
console.info('removeLatestMessage111');
508-
removeLatestMessage();
509-
} else {
510-
if (currentConversationId) {
511-
console.info('111');
512-
// new conversation
513-
handleClickConversation(currentConversationId);
514-
} else {
515-
console.info('222');
516-
// fetchConversation(conversationId);
517-
}
518-
}
519-
},
520-
[
521-
conversation?.message,
522-
conversationId,
523-
handleClickConversation,
524-
removeLatestMessage,
525-
setValue,
526-
send,
527-
],
528-
);
529-
530-
const handleSendMessage = useCallback(
531-
async (message: Message) => {
532-
if (conversationId !== '') {
533-
sendMessage({ message });
534-
} else {
535-
const data = await setConversation(message.content);
536-
if (data.retcode === 0) {
537-
const id = data.data.id;
538-
sendMessage({ message, currentConversationId: id });
539-
}
540-
}
541-
},
542-
[conversationId, setConversation, sendMessage],
543-
);
544-
545-
const { regenerateMessage } = useRegenerateMessage({
546-
removeMessagesAfterCurrentMessage,
547-
sendMessage,
548-
messages: conversation.message,
549-
});
550-
551-
useEffect(() => {
552-
// #1289
553-
if (answer.answer && answer?.conversationId === conversationId) {
554-
addNewestAnswer(answer);
555-
}
556-
}, [answer, addNewestAnswer, conversationId]);
557-
558-
useEffect(() => {
559-
// #1289 switch to another conversion window when the last conversion answer doesn't finish.
560-
if (conversationId) {
561-
setDone(true);
562-
}
563-
}, [setDone, conversationId]);
564-
565-
const handlePressEnter = useCallback(
566-
(documentIds: string[]) => {
567-
if (trim(value) === '') return;
568-
const id = uuid();
569-
570-
addNewestConversation({
571-
content: value,
572-
doc_ids: documentIds,
573-
id,
574-
role: MessageType.User,
575-
});
576-
if (done) {
577-
setValue('');
578-
handleSendMessage({
579-
id,
580-
content: value.trim(),
581-
role: MessageType.User,
582-
doc_ids: documentIds,
583-
});
584-
}
585-
},
586-
[addNewestConversation, handleSendMessage, done, setValue, value],
587-
);
588-
589-
return {
590-
handlePressEnter,
591-
handleInputChange,
592-
value,
593-
setValue,
594-
regenerateMessage,
595-
loading: !done,
596-
};
597-
};
598-
599475
export const useSendNextMessage = () => {
600476
const { setConversation } = useSetConversation();
601477
const { conversationId } = useGetChatSearchParams();
@@ -662,7 +538,11 @@ export const useSendNextMessage = () => {
662538
const data = await setConversation(message.content);
663539
if (data.retcode === 0) {
664540
const id = data.data.id;
665-
sendMessage({ message, currentConversationId: id });
541+
sendMessage({
542+
message,
543+
currentConversationId: id,
544+
messages: data.data.message,
545+
});
666546
}
667547
}
668548
},
@@ -677,10 +557,14 @@ export const useSendNextMessage = () => {
677557

678558
useEffect(() => {
679559
// #1289
680-
if (answer.answer && answer?.conversationId === conversationId) {
560+
if (
561+
answer.answer &&
562+
!done &&
563+
(answer?.conversationId === conversationId || conversationId === '')
564+
) {
681565
addNewestAnswer(answer);
682566
}
683-
}, [answer, addNewestAnswer, conversationId]);
567+
}, [answer, addNewestAnswer, conversationId, done]);
684568

685569
useEffect(() => {
686570
// #1289 switch to another conversion window when the last conversion answer doesn't finish.

0 commit comments

Comments
 (0)