balibabu
commited on
Commit
·
5281167
1
Parent(s):
6b741bf
fix: After sending the message for the first time, the returned content is not streamed out #2067 #1832 (#2191)
Browse files### What problem does this PR solve?
fix: After sending the message for the first time, the returned content
is not streamed out #2067 #1832
### Type of change
- [x] Bug Fix (non-breaking change which fixes an issue)
- web/src/hooks/logic-hooks.ts +2 -0
- web/src/pages/chat/hooks.ts +11 -127
web/src/hooks/logic-hooks.ts
CHANGED
@@ -264,9 +264,11 @@ export const useSendMessageWithSse = (
|
|
264 |
}
|
265 |
console.info('done?');
|
266 |
setDone(true);
|
|
|
267 |
return { data: await res, response };
|
268 |
} catch (e) {
|
269 |
setDone(true);
|
|
|
270 |
console.warn(e);
|
271 |
}
|
272 |
},
|
|
|
264 |
}
|
265 |
console.info('done?');
|
266 |
setDone(true);
|
267 |
+
setAnswer({} as IAnswer);
|
268 |
return { data: await res, response };
|
269 |
} catch (e) {
|
270 |
setDone(true);
|
271 |
+
setAnswer({} as IAnswer);
|
272 |
console.warn(e);
|
273 |
}
|
274 |
},
|
web/src/pages/chat/hooks.ts
CHANGED
@@ -472,130 +472,6 @@ export const useHandleMessageInputChange = () => {
|
|
472 |
};
|
473 |
};
|
474 |
|
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 |
-
|
599 |
export const useSendNextMessage = () => {
|
600 |
const { setConversation } = useSetConversation();
|
601 |
const { conversationId } = useGetChatSearchParams();
|
@@ -662,7 +538,11 @@ export const useSendNextMessage = () => {
|
|
662 |
const data = await setConversation(message.content);
|
663 |
if (data.retcode === 0) {
|
664 |
const id = data.data.id;
|
665 |
-
sendMessage({
|
|
|
|
|
|
|
|
|
666 |
}
|
667 |
}
|
668 |
},
|
@@ -677,10 +557,14 @@ export const useSendNextMessage = () => {
|
|
677 |
|
678 |
useEffect(() => {
|
679 |
// #1289
|
680 |
-
if (
|
|
|
|
|
|
|
|
|
681 |
addNewestAnswer(answer);
|
682 |
}
|
683 |
-
}, [answer, addNewestAnswer, conversationId]);
|
684 |
|
685 |
useEffect(() => {
|
686 |
// #1289 switch to another conversion window when the last conversion answer doesn't finish.
|
|
|
472 |
};
|
473 |
};
|
474 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
475 |
export const useSendNextMessage = () => {
|
476 |
const { setConversation } = useSetConversation();
|
477 |
const { conversationId } = useGetChatSearchParams();
|
|
|
538 |
const data = await setConversation(message.content);
|
539 |
if (data.retcode === 0) {
|
540 |
const id = data.data.id;
|
541 |
+
sendMessage({
|
542 |
+
message,
|
543 |
+
currentConversationId: id,
|
544 |
+
messages: data.data.message,
|
545 |
+
});
|
546 |
}
|
547 |
}
|
548 |
},
|
|
|
557 |
|
558 |
useEffect(() => {
|
559 |
// #1289
|
560 |
+
if (
|
561 |
+
answer.answer &&
|
562 |
+
!done &&
|
563 |
+
(answer?.conversationId === conversationId || conversationId === '')
|
564 |
+
) {
|
565 |
addNewestAnswer(answer);
|
566 |
}
|
567 |
+
}, [answer, addNewestAnswer, conversationId, done]);
|
568 |
|
569 |
useEffect(() => {
|
570 |
// #1289 switch to another conversion window when the last conversion answer doesn't finish.
|