diff --git a/src/renderer/src/hooks/useMessageOperations.ts b/src/renderer/src/hooks/useMessageOperations.ts index 05f87d7f..caa02bda 100644 --- a/src/renderer/src/hooks/useMessageOperations.ts +++ b/src/renderer/src/hooks/useMessageOperations.ts @@ -61,7 +61,7 @@ export function useMessageOperations(topic: Topic) { updates }) ) - db.topics.update(topic.id, { + await db.topics.update(topic.id, { messages: messages.map((m) => (m.id === messageId ? { ...m, ...updates } : m)) }) }, diff --git a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx index cd88b6d2..d1cb1b25 100644 --- a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx +++ b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx @@ -16,7 +16,6 @@ import SelectModelPopup from '@renderer/components/Popups/SelectModelPopup' import TextEditPopup from '@renderer/components/Popups/TextEditPopup' import { TranslateLanguageOptions } from '@renderer/config/translate' import { useMessageOperations } from '@renderer/hooks/useMessageOperations' -import { modelGenerating } from '@renderer/hooks/useRuntime' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { getMessageTitle, resetAssistantMessage } from '@renderer/services/MessagesService' import { translateText } from '@renderer/services/TranslateService' @@ -57,6 +56,7 @@ const MessageMenubar: FC = (props) => { const assistantModel = assistant?.model const { messages, + loading, editMessage, setStreamMessage, deleteMessage, @@ -79,15 +79,15 @@ const MessageMenubar: FC = (props) => { ) const onNewBranch = useCallback(async () => { - await modelGenerating() + if (loading) return EventEmitter.emit(EVENT_NAMES.NEW_BRANCH, index) window.message.success({ content: t('chat.message.new.branch.created'), key: 'new-branch' }) - }, [index, t]) + }, [index, t, loading]) const handleResendUserMessage = useCallback( async (messageUpdate?: Message) => { // messageUpdate 为了处理用户消息更改后的message - await modelGenerating() + if (loading) return const groupdMessages = messages.filter((m) => m.askId === message.id) // Resend all grouped messages @@ -101,7 +101,7 @@ const MessageMenubar: FC = (props) => { await resendMessage(messageUpdate ?? message, assistant) }, - [message, assistantModel, resendMessage, assistant] + [message, assistantModel, resendMessage, assistant, messages, loading] ) const onEdit = useCallback(async () => { @@ -123,16 +123,12 @@ const MessageMenubar: FC = (props) => { ) : null } }) - if (editedText && editedText !== message.content) { + if (editedText && editedText !== message.content && resendMessage) { // 同步修改store中用户消息 - editMessage(message.id, { content: editedText }) - - // const updatedMessages = onGetMessages?.() || [] - // dispatch(updateMessages(topic, updatedMessages)) + await editMessage(message.id, { content: editedText }) + handleResendUserMessage({ ...message, content: editedText }) } - - if (resendMessage) handleResendUserMessage({ ...message, content: editedText }) - }, [message, editMessage, topic, handleResendUserMessage, t]) + }, [message, editMessage, handleResendUserMessage, t]) const handleTranslate = useCallback( async (language: string) => { @@ -238,7 +234,7 @@ const MessageMenubar: FC = (props) => { const onRegenerate = async (e: React.MouseEvent | undefined) => { e?.stopPropagation?.() - await modelGenerating() + if (loading) return const selectedModel = isGrouped ? model : assistantModel const _message = resetAssistantMessage(message, selectedModel) editMessage(message.id, { ..._message }) @@ -247,7 +243,7 @@ const MessageMenubar: FC = (props) => { const onMentionModel = async (e: React.MouseEvent) => { e.stopPropagation() - await modelGenerating() + if (loading) return const selectedModel = await SelectModelPopup.show({ model }) if (!selectedModel) return resendMessage(message, { ...assistant, model: selectedModel }, true) diff --git a/src/renderer/src/store/messages.ts b/src/renderer/src/store/messages.ts index 1a74a4d9..1ccfc1d9 100644 --- a/src/renderer/src/store/messages.ts +++ b/src/renderer/src/store/messages.ts @@ -382,10 +382,12 @@ export const resendMessage = if (message.role === 'user') { // 查找此用户消息对应的助手消息 const assistantMessage = topicMessages.find((m) => m.role === 'assistant' && m.askId === message.id) - return dispatch( sendMessage(message, assistant, topic, { - resendAssistantMessage: assistantMessage + resendAssistantMessage: assistantMessage, + // 用户可能把助手消息删了,然后重新发送用户消息 + // 如果isMentionModel为false,则只会发送add助手消息 + isMentionModel: !assistantMessage }) ) }