mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 22:39:36 +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[] = []
|
const resetDataList: Message[] = []
|
||||||
|
|
||||||
if (assistantMessagesToReset.length === 0) {
|
if (assistantMessagesToReset.length === 0 && !userMessageToResend?.mentions?.length) {
|
||||||
// 没有相关的助手消息就创建一个或多个
|
// 没有相关的助手消息且没有提及模型时,使用助手模型创建一条消息
|
||||||
|
|
||||||
if (userMessageToResend?.mentions?.length) {
|
const assistantMessage = createAssistantMessage(assistant.id, topicId, {
|
||||||
for (const mention of userMessageToResend.mentions) {
|
askId: userMessageToResend.id,
|
||||||
const assistantMessage = createAssistantMessage(assistant.id, topicId, {
|
model: assistant.model
|
||||||
askId: userMessageToResend.id,
|
})
|
||||||
model: mention,
|
resetDataList.push(assistantMessage)
|
||||||
modelId: mention.id
|
|
||||||
})
|
|
||||||
resetDataList.push(assistantMessage)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const assistantMessage = createAssistantMessage(assistant.id, topicId, {
|
|
||||||
askId: userMessageToResend.id,
|
|
||||||
model: assistant.model
|
|
||||||
})
|
|
||||||
resetDataList.push(assistantMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
resetDataList.forEach((message) => {
|
resetDataList.forEach((message) => {
|
||||||
dispatch(newMessagesActions.addMessage({ topicId, message }))
|
dispatch(newMessagesActions.addMessage({ topicId, message }))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理存在相关的助手消息的情况
|
||||||
const allBlockIdsToDelete: string[] = []
|
const allBlockIdsToDelete: string[] = []
|
||||||
const messagesToUpdateInRedux: { topicId: string; messageId: string; updates: Partial<Message> }[] = []
|
const messagesToUpdateInRedux: { topicId: string; messageId: string; updates: Partial<Message> }[] = []
|
||||||
|
|
||||||
|
// 先处理已有的重传
|
||||||
for (const originalMsg of assistantMessagesToReset) {
|
for (const originalMsg of assistantMessagesToReset) {
|
||||||
|
const modelToSet =
|
||||||
|
assistantMessagesToReset.length === 1 && !userMessageToResend?.mentions?.length
|
||||||
|
? assistant.model
|
||||||
|
: originalMsg.model
|
||||||
const blockIdsToDelete = [...(originalMsg.blocks || [])]
|
const blockIdsToDelete = [...(originalMsg.blocks || [])]
|
||||||
const resetMsg = resetAssistantMessage(originalMsg, {
|
const resetMsg = resetAssistantMessage(originalMsg, {
|
||||||
status: AssistantMessageStatus.PENDING,
|
status: AssistantMessageStatus.PENDING,
|
||||||
updatedAt: new Date().toISOString(),
|
updatedAt: new Date().toISOString(),
|
||||||
...(assistantMessagesToReset.length === 1 ? { model: assistant.model } : {})
|
model: modelToSet
|
||||||
})
|
})
|
||||||
|
|
||||||
resetDataList.push(resetMsg)
|
resetDataList.push(resetMsg)
|
||||||
@ -1157,6 +1152,20 @@ export const resendMessageThunk =
|
|||||||
messagesToUpdateInRedux.push({ topicId, messageId: resetMsg.id, updates: resetMsg })
|
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)))
|
messagesToUpdateInRedux.forEach((update) => dispatch(newMessagesActions.updateMessage(update)))
|
||||||
cleanupMultipleBlocks(dispatch, allBlockIdsToDelete)
|
cleanupMultipleBlocks(dispatch, allBlockIdsToDelete)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user