feat: re-generage message
This commit is contained in:
parent
4cfd7403a1
commit
1bcb20f76a
@ -14,13 +14,17 @@ import { firstLetter } from '@renderer/utils'
|
||||
|
||||
interface Props {
|
||||
message: Message
|
||||
index?: number
|
||||
total?: number
|
||||
showMenu?: boolean
|
||||
onDeleteMessage?: (message: Message) => void
|
||||
}
|
||||
|
||||
const MessageItem: FC<Props> = ({ message, showMenu, onDeleteMessage }) => {
|
||||
const MessageItem: FC<Props> = ({ message, index, showMenu, onDeleteMessage }) => {
|
||||
const avatar = useAvatar()
|
||||
|
||||
const isLastMessage = index === 0
|
||||
|
||||
const onCopy = () => {
|
||||
navigator.clipboard.writeText(message.content)
|
||||
window.message.success({ content: 'Copied!', key: 'copy-message' })
|
||||
@ -41,6 +45,11 @@ const MessageItem: FC<Props> = ({ message, showMenu, onDeleteMessage }) => {
|
||||
EventEmitter.emit(EVENT_NAMES.EDIT_MESSAGE, message)
|
||||
}
|
||||
|
||||
const onRegenerate = () => {
|
||||
onDeleteMessage?.(message)
|
||||
setTimeout(() => EventEmitter.emit(EVENT_NAMES.REGENERATE_MESSAGE), 100)
|
||||
}
|
||||
|
||||
return (
|
||||
<MessageContainer key={message.id}>
|
||||
<AvatarWrapper>
|
||||
@ -64,18 +73,23 @@ const MessageItem: FC<Props> = ({ message, showMenu, onDeleteMessage }) => {
|
||||
</Markdown>
|
||||
)}
|
||||
{showMenu && (
|
||||
<MenusBar className="menubar">
|
||||
<MenusBar className={`menubar ${isLastMessage && 'show'}`}>
|
||||
{message.role === 'user' && (
|
||||
<Tooltip title="Edit" mouseEnterDelay={1}>
|
||||
<Tooltip title="Edit" mouseEnterDelay={0.8}>
|
||||
<EditOutlined onClick={onEdit} />
|
||||
</Tooltip>
|
||||
)}
|
||||
<Tooltip title="Copy" mouseEnterDelay={1}>
|
||||
<Tooltip title="Copy" mouseEnterDelay={0.8}>
|
||||
<CopyOutlined onClick={onCopy} />
|
||||
</Tooltip>
|
||||
<Tooltip title="Delete" mouseEnterDelay={1}>
|
||||
<Tooltip title="Delete" mouseEnterDelay={0.8}>
|
||||
<DeleteOutlined onClick={onDelete} />
|
||||
</Tooltip>
|
||||
{isLastMessage && (
|
||||
<Tooltip title="Regenerate" mouseEnterDelay={0.8}>
|
||||
<SyncOutlined onClick={onRegenerate} />
|
||||
</Tooltip>
|
||||
)}
|
||||
<MessageMetadata>{message.modelId}</MessageMetadata>
|
||||
{message.usage && (
|
||||
<>
|
||||
@ -110,6 +124,9 @@ const MessageContent = styled.div`
|
||||
justify-content: space-between;
|
||||
.menubar {
|
||||
opacity: 0;
|
||||
&.show {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
&:hover {
|
||||
.menubar {
|
||||
|
||||
@ -74,6 +74,9 @@ const Messages: FC<Props> = ({ assistant, topic }) => {
|
||||
onSendMessage(msg)
|
||||
setTimeout(() => EventEmitter.emit(EVENT_NAMES.AI_AUTO_RENAME), 100)
|
||||
}),
|
||||
EventEmitter.on(EVENT_NAMES.REGENERATE_MESSAGE, async () => {
|
||||
fetchChatCompletion({ assistant, messages: messages, topic, onResponse: setLastMessage })
|
||||
}),
|
||||
EventEmitter.on(EVENT_NAMES.AI_AUTO_RENAME, autoRenameTopic),
|
||||
EventEmitter.on(EVENT_NAMES.CLEAR_MESSAGES, () => {
|
||||
setMessages([])
|
||||
@ -98,8 +101,8 @@ const Messages: FC<Props> = ({ assistant, topic }) => {
|
||||
return (
|
||||
<Container id="messages" key={assistant.id} ref={messagesRef}>
|
||||
{lastMessage && <MessageItem message={lastMessage} />}
|
||||
{reverse([...messages]).map((message) => (
|
||||
<MessageItem message={message} key={message.id} showMenu onDeleteMessage={onDeleteMessage} />
|
||||
{reverse([...messages]).map((message, index) => (
|
||||
<MessageItem key={message.id} message={message} showMenu index={index} onDeleteMessage={onDeleteMessage} />
|
||||
))}
|
||||
<MessageItem message={assistantDefaultMessage} />
|
||||
</Container>
|
||||
|
||||
@ -8,5 +8,6 @@ export const EVENT_NAMES = {
|
||||
AI_AUTO_RENAME: 'AI_AUTO_RENAME',
|
||||
CLEAR_MESSAGES: 'CLEAR_MESSAGES',
|
||||
ADD_ASSISTANT: 'ADD_ASSISTANT',
|
||||
EDIT_MESSAGE: 'EDIT_MESSAGE'
|
||||
EDIT_MESSAGE: 'EDIT_MESSAGE',
|
||||
REGENERATE_MESSAGE: 'REGENERATE_MESSAGE'
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user