feat: add regenerate message button

This commit is contained in:
kangfenmao 2025-02-03 11:18:55 +08:00
parent d12fc29515
commit 66c2c530c5
2 changed files with 24 additions and 9 deletions

View File

@ -196,6 +196,12 @@ const MessageMenubar: FC<Props> = (props) => {
)
const onRegenerate = async () => {
await modelGenerating()
const _message: Message = resetAssistantMessage(message, assistantModel)
onEditMessage?.(_message)
}
const onMentionModel = async () => {
await modelGenerating()
const selectedModel = await SelectModelPopup.show({ model })
if (!selectedModel) return
@ -228,10 +234,24 @@ const MessageMenubar: FC<Props> = (props) => {
{copied && <CheckOutlined style={{ color: 'var(--color-primary)' }} />}
</ActionButton>
</Tooltip>
{isAssistantMessage && (
<Popconfirm
title={t('message.regenerate.confirm')}
okButtonProps={{ danger: true }}
destroyTooltipOnHide
icon={<QuestionCircleOutlined style={{ color: 'red' }} />}
onConfirm={onRegenerate}>
<Tooltip title={t('common.regenerate')} mouseEnterDelay={0.8}>
<ActionButton className="message-action-button">
<SyncOutlined />
</ActionButton>
</Tooltip>
</Popconfirm>
)}
{isAssistantMessage && (
<Tooltip title={t('common.regenerate')} mouseEnterDelay={0.8}>
<ActionButton className="message-action-button" onClick={onRegenerate}>
<SyncOutlined />
<ActionButton className="message-action-button" onClick={onMentionModel}>
<i className="iconfont icon-at" style={{ fontSize: 16 }}></i>
</ActionButton>
</Tooltip>
)}

View File

@ -9,15 +9,14 @@ import { getDefaultTopic } from '@renderer/services/AssistantService'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import {
deleteMessageFiles,
filterMessages,
getAssistantMessage,
getContextCount,
getGroupedMessages,
getUserMessage
} from '@renderer/services/MessagesService'
import { estimateHistoryTokens } from '@renderer/services/TokenService'
import { Assistant, Message, Model, Topic } from '@renderer/types'
import { captureScrollableDiv, runAsyncFunction, uuid } from '@renderer/utils'
import { Assistant, Message, Topic } from '@renderer/types'
import { captureScrollableDiv, runAsyncFunction } from '@renderer/utils'
import { t } from 'i18next'
import { flatten, last, take } from 'lodash'
import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react'
@ -162,10 +161,6 @@ const Messages: FC<Props> = ({ assistant, topic, setActiveTopic }) => {
EventEmitter.on(EVENT_NAMES.RECEIVE_MESSAGE, async () => {
setTimeout(() => EventEmitter.emit(EVENT_NAMES.AI_AUTO_RENAME), 100)
}),
EventEmitter.on(EVENT_NAMES.REGENERATE_MESSAGE, async (model: Model) => {
const lastUserMessage = last(filterMessages(messages).filter((m) => m.role === 'user'))
lastUserMessage && onSendMessage({ ...lastUserMessage, id: uuid(), model: model, mentions: [model] })
}),
EventEmitter.on(EVENT_NAMES.AI_AUTO_RENAME, autoRenameTopic),
EventEmitter.on(EVENT_NAMES.CLEAR_MESSAGES, () => {
setMessages([])