fix: handle mentions when resending message (#7819)

* fix(messageThunk): 修复重置消息时模型未正确继承的问题

* fix(消息重发): 修复重发消息时模型选择逻辑

确保当原始消息模型被提及时才使用该模型,否则使用助手默认模型

* style(PasteService): 统一文件换行符为LF格式

* Revert "style(PasteService): 统一文件换行符为LF格式"

This reverts commit 37a1443b73.

* refactor(messageThunk): 优化消息重发逻辑,分离新旧消息处理

将消息重发逻辑拆分为处理已有消息和新增提及模型消息两部分
简化条件判断,移除冗余代码

* style(messageThunk): 移除多余的空行

* fix(消息重传): 单条无提及消息重传时使用助手模型

当重传单条无提及消息时,使用助手模型进行重传,其他情况保持原有逻辑

* Revert "fix(消息重传): 单条无提及消息重传时使用助手模型"

This reverts commit 2e369174e7.

* fix(消息重发): 修改重发消息时模型设置逻辑
This commit is contained in:
Phantom 2025-07-16 19:36:45 +08:00 committed by GitHub
parent 31ee7a2e9a
commit 8384bbfc0a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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<Message> }[] = []
// 先处理已有的重传
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)