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.
|