From 0850c953b320e11935640312c448b9ace8f8b7b8 Mon Sep 17 00:00:00 2001 From: zxhlyh Date: Mon, 12 Feb 2024 22:22:57 +0800 Subject: [PATCH] fix: variable in opener (#2437) --- .../chat/chat-with-history/chat-wrapper.tsx | 8 +++-- web/app/components/base/chat/chat/hooks.ts | 36 ++++++++++++------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx index a8a58b55f6..85db8ae438 100644 --- a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx +++ b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx @@ -36,8 +36,9 @@ const ChatWrapper = () => { return { ...config, supportFeedback: true, + opening_statement: currentConversationId ? currentConversationItem?.introduction : (config as any).opening_statement, } as ChatConfig - }, [appParams]) + }, [appParams, currentConversationItem?.introduction, currentConversationId]) const { chatList, handleSend, @@ -46,7 +47,10 @@ const ChatWrapper = () => { suggestedQuestions, } = useChat( appConfig, - undefined, + { + inputs: (currentConversationId ? currentConversationItem?.inputs : newConversationInputs) as any, + promptVariables: inputsForms, + }, appPrevChatList, taskId => stopChatMessageResponding('', taskId, isInstalledApp, appId), ) diff --git a/web/app/components/base/chat/chat/hooks.ts b/web/app/components/base/chat/chat/hooks.ts index c056e35f3f..896ef74369 100644 --- a/web/app/components/base/chat/chat/hooks.ts +++ b/web/app/components/base/chat/chat/hooks.ts @@ -100,7 +100,7 @@ export const useChat = ( const handleUpdateChatList = useCallback((newChatList: ChatItem[]) => { setChatList(newChatList) chatListRef.current = newChatList - }, [setChatList]) + }, []) const handleResponsing = useCallback((isResponsing: boolean) => { setIsResponsing(isResponsing) isResponsingRef.current = isResponsing @@ -110,19 +110,29 @@ export const useChat = ( return replaceStringWithValues(str, promptVariablesConfig?.promptVariables || [], promptVariablesConfig?.inputs || {}) }, [promptVariablesConfig?.inputs, promptVariablesConfig?.promptVariables]) useEffect(() => { - if (config?.opening_statement && chatListRef.current.filter(item => item.isOpeningStatement).length === 0) { - handleUpdateChatList([ - { - id: `${Date.now()}`, - content: getIntroduction(config.opening_statement), - isAnswer: true, - isOpeningStatement: true, - suggestedQuestions: config.suggested_questions, - }, - ...chatListRef.current, - ]) + if (config?.opening_statement) { + handleUpdateChatList(produce(chatListRef.current, (draft) => { + const index = draft.findIndex(item => item.isOpeningStatement) + + if (index > -1) { + draft[index] = { + ...draft[index], + content: getIntroduction(config.opening_statement), + suggestedQuestions: config.suggested_questions, + } + } + else { + draft.unshift({ + id: `${Date.now()}`, + content: getIntroduction(config.opening_statement), + isAnswer: true, + isOpeningStatement: true, + suggestedQuestions: config.suggested_questions, + }) + } + })) } - }, []) + }, [config?.opening_statement, getIntroduction, config?.suggested_questions, handleUpdateChatList]) const handleStop = useCallback(() => { hasStopResponded.current = true