mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-05 20:41:30 +08:00
feat: add regenerate message button
This commit is contained in:
parent
089375c822
commit
236f25df8a
@ -196,6 +196,12 @@ const MessageMenubar: FC<Props> = (props) => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const onRegenerate = async () => {
|
const onRegenerate = async () => {
|
||||||
|
await modelGenerating()
|
||||||
|
const _message: Message = resetAssistantMessage(message, assistantModel)
|
||||||
|
onEditMessage?.(_message)
|
||||||
|
}
|
||||||
|
|
||||||
|
const onMentionModel = async () => {
|
||||||
await modelGenerating()
|
await modelGenerating()
|
||||||
const selectedModel = await SelectModelPopup.show({ model })
|
const selectedModel = await SelectModelPopup.show({ model })
|
||||||
if (!selectedModel) return
|
if (!selectedModel) return
|
||||||
@ -228,10 +234,24 @@ const MessageMenubar: FC<Props> = (props) => {
|
|||||||
{copied && <CheckOutlined style={{ color: 'var(--color-primary)' }} />}
|
{copied && <CheckOutlined style={{ color: 'var(--color-primary)' }} />}
|
||||||
</ActionButton>
|
</ActionButton>
|
||||||
</Tooltip>
|
</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 && (
|
{isAssistantMessage && (
|
||||||
<Tooltip title={t('common.regenerate')} mouseEnterDelay={0.8}>
|
<Tooltip title={t('common.regenerate')} mouseEnterDelay={0.8}>
|
||||||
<ActionButton className="message-action-button" onClick={onRegenerate}>
|
<ActionButton className="message-action-button" onClick={onMentionModel}>
|
||||||
<SyncOutlined />
|
<i className="iconfont icon-at" style={{ fontSize: 16 }}></i>
|
||||||
</ActionButton>
|
</ActionButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -9,15 +9,14 @@ import { getDefaultTopic } from '@renderer/services/AssistantService'
|
|||||||
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
|
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
|
||||||
import {
|
import {
|
||||||
deleteMessageFiles,
|
deleteMessageFiles,
|
||||||
filterMessages,
|
|
||||||
getAssistantMessage,
|
getAssistantMessage,
|
||||||
getContextCount,
|
getContextCount,
|
||||||
getGroupedMessages,
|
getGroupedMessages,
|
||||||
getUserMessage
|
getUserMessage
|
||||||
} from '@renderer/services/MessagesService'
|
} from '@renderer/services/MessagesService'
|
||||||
import { estimateHistoryTokens } from '@renderer/services/TokenService'
|
import { estimateHistoryTokens } from '@renderer/services/TokenService'
|
||||||
import { Assistant, Message, Model, Topic } from '@renderer/types'
|
import { Assistant, Message, Topic } from '@renderer/types'
|
||||||
import { captureScrollableDiv, runAsyncFunction, uuid } from '@renderer/utils'
|
import { captureScrollableDiv, runAsyncFunction } from '@renderer/utils'
|
||||||
import { t } from 'i18next'
|
import { t } from 'i18next'
|
||||||
import { flatten, last, take } from 'lodash'
|
import { flatten, last, take } from 'lodash'
|
||||||
import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
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 () => {
|
EventEmitter.on(EVENT_NAMES.RECEIVE_MESSAGE, async () => {
|
||||||
setTimeout(() => EventEmitter.emit(EVENT_NAMES.AI_AUTO_RENAME), 100)
|
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.AI_AUTO_RENAME, autoRenameTopic),
|
||||||
EventEmitter.on(EVENT_NAMES.CLEAR_MESSAGES, () => {
|
EventEmitter.on(EVENT_NAMES.CLEAR_MESSAGES, () => {
|
||||||
setMessages([])
|
setMessages([])
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user