From 8384bbfc0af3b599cf692742e061199207d808fb Mon Sep 17 00:00:00 2001 From: Phantom <59059173+EurFelux@users.noreply.github.com> Date: Wed, 16 Jul 2025 19:36:45 +0800 Subject: [PATCH] fix: handle mentions when resending message (#7819) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(messageThunk): 修复重置消息时模型未正确继承的问题 * fix(消息重发): 修复重发消息时模型选择逻辑 确保当原始消息模型被提及时才使用该模型,否则使用助手默认模型 * style(PasteService): 统一文件换行符为LF格式 * Revert "style(PasteService): 统一文件换行符为LF格式" This reverts commit 37a1443b739dc8ad3338259bff275b845cfda7a4. * refactor(messageThunk): 优化消息重发逻辑,分离新旧消息处理 将消息重发逻辑拆分为处理已有消息和新增提及模型消息两部分 简化条件判断,移除冗余代码 * style(messageThunk): 移除多余的空行 * fix(消息重传): 单条无提及消息重传时使用助手模型 当重传单条无提及消息时,使用助手模型进行重传,其他情况保持原有逻辑 * Revert "fix(消息重传): 单条无提及消息重传时使用助手模型" This reverts commit 2e369174e7ec47b157c683964fdb04065b811ec7. * fix(消息重发): 修改重发消息时模型设置逻辑 --- src/renderer/src/store/thunk/messageThunk.ts | 47 ++++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/renderer/src/store/thunk/messageThunk.ts b/src/renderer/src/store/thunk/messageThunk.ts index 7fe4b303e5..ec9913f0dd 100644 --- a/src/renderer/src/store/thunk/messageThunk.ts +++ b/src/renderer/src/store/thunk/messageThunk.ts @@ -1116,40 +1116,35 @@ export const resendMessageThunk = const resetDataList: Message[] = [] - if (assistantMessagesToReset.length === 0) { - // 没有相关的助手消息就创建一个或多个 + if (assistantMessagesToReset.length === 0 && !userMessageToResend?.mentions?.length) { + // 没有相关的助手消息且没有提及模型时,使用助手模型创建一条消息 - if (userMessageToResend?.mentions?.length) { - for (const mention of userMessageToResend.mentions) { - const assistantMessage = createAssistantMessage(assistant.id, topicId, { - askId: userMessageToResend.id, - model: mention, - modelId: mention.id - }) - resetDataList.push(assistantMessage) - } - } else { - const assistantMessage = createAssistantMessage(assistant.id, topicId, { - askId: userMessageToResend.id, - model: assistant.model - }) - resetDataList.push(assistantMessage) - } + const assistantMessage = createAssistantMessage(assistant.id, topicId, { + askId: userMessageToResend.id, + model: assistant.model + }) + resetDataList.push(assistantMessage) resetDataList.forEach((message) => { dispatch(newMessagesActions.addMessage({ topicId, message })) }) } + // 处理存在相关的助手消息的情况 const allBlockIdsToDelete: string[] = [] const messagesToUpdateInRedux: { topicId: string; messageId: string; updates: Partial }[] = [] + // 先处理已有的重传 for (const originalMsg of assistantMessagesToReset) { + const modelToSet = + assistantMessagesToReset.length === 1 && !userMessageToResend?.mentions?.length + ? assistant.model + : originalMsg.model const blockIdsToDelete = [...(originalMsg.blocks || [])] const resetMsg = resetAssistantMessage(originalMsg, { status: AssistantMessageStatus.PENDING, updatedAt: new Date().toISOString(), - ...(assistantMessagesToReset.length === 1 ? { model: assistant.model } : {}) + model: modelToSet }) resetDataList.push(resetMsg) @@ -1157,6 +1152,20 @@ export const resendMessageThunk = messagesToUpdateInRedux.push({ topicId, messageId: resetMsg.id, updates: resetMsg }) } + // 再处理新的重传(用户消息提及,但是现有助手消息中不存在提及的模型) + const originModelSet = new Set(assistantMessagesToReset.map((m) => m.model).filter((m) => m !== undefined)) + const mentionedModelSet = new Set(userMessageToResend.mentions ?? []) + const newModelSet = new Set([...mentionedModelSet].filter((m) => !originModelSet.has(m))) + for (const model of newModelSet) { + const assistantMessage = createAssistantMessage(assistant.id, topicId, { + askId: userMessageToResend.id, + model: model, + modelId: model.id + }) + resetDataList.push(assistantMessage) + dispatch(newMessagesActions.addMessage({ topicId, message: assistantMessage })) + } + messagesToUpdateInRedux.forEach((update) => dispatch(newMessagesActions.updateMessage(update))) cleanupMultipleBlocks(dispatch, allBlockIdsToDelete)