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