mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-28 05:11:24 +08:00
refactor(messageThunk): 优化消息重发逻辑,分离新旧消息处理
将消息重发逻辑拆分为处理已有消息和新增提及模型消息两部分 简化条件判断,移除冗余代码
This commit is contained in:
parent
16fbd685c7
commit
6ad4e2129c
@ -1069,48 +1069,30 @@ export const resendMessageThunk =
|
||||
|
||||
const resetDataList: Message[] = []
|
||||
|
||||
if (assistantMessagesToReset.length === 0) {
|
||||
// 没有相关的助手消息就创建一个或多个
|
||||
if (assistantMessagesToReset.length === 0 && !userMessageToResend?.mentions?.length) {
|
||||
// 没有相关的助手消息且没有提及模型时,使用助手模型创建一条消息
|
||||
|
||||
if (userMessageToResend?.mentions?.length) {
|
||||
console.log('userMessageToResend.mentions', userMessageToResend.mentions)
|
||||
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 blockIdsToDelete = [...(originalMsg.blocks || [])]
|
||||
const resetMsg = resetAssistantMessage(originalMsg, {
|
||||
status: AssistantMessageStatus.PENDING,
|
||||
updatedAt: new Date().toISOString(),
|
||||
...(assistantMessagesToReset.length === 1
|
||||
? {
|
||||
model:
|
||||
originalMsg.model && userMessageToResend.mentions?.includes(originalMsg.model)
|
||||
? originalMsg.model
|
||||
: assistant.model
|
||||
}
|
||||
: {})
|
||||
updatedAt: new Date().toISOString()
|
||||
})
|
||||
|
||||
resetDataList.push(resetMsg)
|
||||
@ -1118,6 +1100,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