From 1bcb20f76a67454ad2266c3624810628bc4ee8de Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Thu, 11 Jul 2024 21:17:12 +0800 Subject: [PATCH] feat: re-generage message --- .../src/pages/home/components/Message.tsx | 27 +++++++++++++++---- .../src/pages/home/components/Messages.tsx | 7 +++-- src/renderer/src/services/event.ts | 3 ++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/renderer/src/pages/home/components/Message.tsx b/src/renderer/src/pages/home/components/Message.tsx index 5e295c50..0bc80142 100644 --- a/src/renderer/src/pages/home/components/Message.tsx +++ b/src/renderer/src/pages/home/components/Message.tsx @@ -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 = ({ message, showMenu, onDeleteMessage }) => { +const MessageItem: FC = ({ 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 = ({ message, showMenu, onDeleteMessage }) => { EventEmitter.emit(EVENT_NAMES.EDIT_MESSAGE, message) } + const onRegenerate = () => { + onDeleteMessage?.(message) + setTimeout(() => EventEmitter.emit(EVENT_NAMES.REGENERATE_MESSAGE), 100) + } + return ( @@ -64,18 +73,23 @@ const MessageItem: FC = ({ message, showMenu, onDeleteMessage }) => { )} {showMenu && ( - + {message.role === 'user' && ( - + )} - + - + + {isLastMessage && ( + + + + )} {message.modelId} {message.usage && ( <> @@ -110,6 +124,9 @@ const MessageContent = styled.div` justify-content: space-between; .menubar { opacity: 0; + &.show { + opacity: 1; + } } &:hover { .menubar { diff --git a/src/renderer/src/pages/home/components/Messages.tsx b/src/renderer/src/pages/home/components/Messages.tsx index 31845c22..38eaed6d 100644 --- a/src/renderer/src/pages/home/components/Messages.tsx +++ b/src/renderer/src/pages/home/components/Messages.tsx @@ -74,6 +74,9 @@ const Messages: FC = ({ 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 = ({ assistant, topic }) => { return ( {lastMessage && } - {reverse([...messages]).map((message) => ( - + {reverse([...messages]).map((message, index) => ( + ))} diff --git a/src/renderer/src/services/event.ts b/src/renderer/src/services/event.ts index eb1859c3..34aba9aa 100644 --- a/src/renderer/src/services/event.ts +++ b/src/renderer/src/services/event.ts @@ -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' }