From 6b2a2bb8589ec615cbbb4e942a08e48a8418bba6 Mon Sep 17 00:00:00 2001 From: Wentao Lyu <35-wentao.lyu@users.noreply.git.stereye.tech> Date: Sat, 18 Mar 2023 00:52:16 +0800 Subject: [PATCH] feat: save cancelled flag in message --- client/src/components/Main/TextChat.jsx | 90 +++++++++++++++---------- client/src/utils/handleSubmit.js | 3 +- 2 files changed, 57 insertions(+), 36 deletions(-) diff --git a/client/src/components/Main/TextChat.jsx b/client/src/components/Main/TextChat.jsx index cf5d83132f..4544c8a35d 100644 --- a/client/src/components/Main/TextChat.jsx +++ b/client/src/components/Main/TextChat.jsx @@ -35,7 +35,7 @@ export default function TextChat({ messages }) { const { error, latestMessage } = convo; const { ask, regenerate, stopGenerating } = useMessageHandler(); - const isNotAppendable = (!isSubmitting && latestMessage?.submitting) || latestMessage?.error; + const isNotAppendable = (!isSubmitting && latestMessage?.cancelled) || latestMessage?.error; // auto focus to input, when enter a conversation. useEffect(() => { @@ -75,6 +75,15 @@ export default function TextChat({ messages }) { ); }; + const cancelHandler = (data, currentState, currentMsg) => { + const { messages, _currentMsg, message, sender, isRegenerate } = currentState; + + if (isRegenerate) + dispatch(setMessages([...messages, { sender, text: data, parentMessageId: message?.overrideParentMessageId, messageId: message?.overrideParentMessageId + '_', cancelled: true }])); + else + dispatch(setMessages([...messages, currentMsg, { sender, text: data, parentMessageId: currentMsg?.messageId, messageId: currentMsg?.messageId + '_', cancelled: true }])); + }; + const createdHandler = (data, currentState, currentMsg) => { const { conversationId } = currentMsg; dispatch( @@ -91,11 +100,24 @@ export default function TextChat({ messages }) { const { messages, _currentMsg, message, isCustomModel, sender, isRegenerate } = currentState; const { model, chatGptLabel, promptPrefix } = message; +<<<<<<< HEAD if (isRegenerate) dispatch(setMessages([...messages, responseMessage])); else dispatch(setMessages([...messages, requestMessage, responseMessage])); +======= + if (isRegenerate) + dispatch( + setMessages([...messages, responseMessage,]) + ); + else + dispatch( + setMessages([...messages, requestMessage, responseMessage,]) + ); + dispatch(setSubmitState(false)); +>>>>>>> 92d0d11 (feat: save cancelled flag in message) const isBing = model === 'bingai' || model === 'sydney'; + // refresh title if (requestMessage.parentMessageId == '00000000-0000-0000-0000-000000000000') { setTimeout(() => { dispatch(refreshConversation()); @@ -163,8 +185,6 @@ export default function TextChat({ messages }) { }) ); } - - dispatch(setSubmitState(false)); }; const errorHandler = (data, currentState, currentMsg) => { @@ -193,8 +213,14 @@ export default function TextChat({ messages }) { } const currentState = submission; +<<<<<<< HEAD let currentMsg = { ...currentState.message }; +======= + let currentMsg = {...currentState.message}; + let latestResponseText = ''; + +>>>>>>> 92d0d11 (feat: save cancelled flag in message) const { server, payload } = createPayload(submission); const onMessage = (e) => { if (stopStream) { @@ -216,6 +242,7 @@ export default function TextChat({ messages }) { console.log(data); } if (data.message) { + latestResponseText = text; messageHandler(text, currentState, currentMsg); } // console.log('dataStream', data); @@ -233,6 +260,10 @@ export default function TextChat({ messages }) { events.onmessage = onMessage; + events.oncancel = (e) => { + cancelHandler(latestResponseText, currentState, currentMsg); + }; + events.onerror = function (e) { console.log('error in opening conn.'); events.close(); @@ -247,7 +278,12 @@ export default function TextChat({ messages }) { return () => { dispatch(setSubmitState(false)); events.removeEventListener('message', onMessage); + const isCancelled = events.readyState <= 1; events.close(); + if (isCancelled) { + const e = new Event("cancel"); + events.dispatchEvent(e) + } }; }, [submission]); @@ -301,24 +337,12 @@ export default function TextChat({ messages }) { dispatch(setError(false)); }; - const placeholder = () => { - if (disabled && isSubmitting) { - return 'Choose another model or customize GPT again'; - } else if (!isSubmitting && latestMessage?.submitting) { - return 'Message in progress...'; - // } else if (latestMessage?.error) { - // return 'Error...'; - } else { - return ''; - } - }; - return (
- - {isSubmitting ? ( + + {isSubmitting? - ) : latestMessage && !latestMessage?.isCreatedByUser ? ( - - ) : null} + :(latestMessage&&!latestMessage?.isCreatedByUser)? + + :null + }
- +
diff --git a/client/src/utils/handleSubmit.js b/client/src/utils/handleSubmit.js index b5803aef17..9e48c2028a 100644 --- a/client/src/utils/handleSubmit.js +++ b/client/src/utils/handleSubmit.js @@ -46,9 +46,8 @@ const useMessageHandler = () => { dispatch(setMessages([...currentMessages, initialResponse])); } else { dispatch(setMessages([...currentMessages, currentMsg, initialResponse])); + dispatch(setText('')); } - dispatch(setText('')); - const submission = { convo, isCustomModel,