mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-31 00:10:22 +08:00
fix: handle mentions when resending message (#7819)
* fix(messageThunk): 修复重置消息时模型未正确继承的问题 * fix(消息重发): 修复重发消息时模型选择逻辑 确保当原始消息模型被提及时才使用该模型,否则使用助手默认模型 * style(PasteService): 统一文件换行符为LF格式 * Revert "style(PasteService): 统一文件换行符为LF格式" This reverts commit37a1443b73. * refactor(messageThunk): 优化消息重发逻辑,分离新旧消息处理 将消息重发逻辑拆分为处理已有消息和新增提及模型消息两部分 简化条件判断,移除冗余代码 * style(messageThunk): 移除多余的空行 * fix(消息重传): 单条无提及消息重传时使用助手模型 当重传单条无提及消息时,使用助手模型进行重传,其他情况保持原有逻辑 * Revert "fix(消息重传): 单条无提及消息重传时使用助手模型" This reverts commit2e369174e7. * fix(消息重发): 修改重发消息时模型设置逻辑
This commit is contained in:
parent
31ee7a2e9a
commit
8384bbfc0a
@ -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)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user