diff --git a/web/screens/Chat/ChatItem/index.tsx b/web/screens/Chat/ChatItem/index.tsx index a085c3dc8..5f192d436 100644 --- a/web/screens/Chat/ChatItem/index.tsx +++ b/web/screens/Chat/ChatItem/index.tsx @@ -7,7 +7,10 @@ import SimpleTextMessage from '../SimpleTextMessage' type Ref = HTMLDivElement const ChatItem = forwardRef((message, ref) => ( -
+
)) diff --git a/web/screens/Chat/MessageToolbar/index.tsx b/web/screens/Chat/MessageToolbar/index.tsx index aafe142c2..5b2a9ccf8 100644 --- a/web/screens/Chat/MessageToolbar/index.tsx +++ b/web/screens/Chat/MessageToolbar/index.tsx @@ -35,63 +35,69 @@ const MessageToolbar = ({ message }: { message: ThreadMessage }) => { } return (
- {message.status === MessageStatus.Pending && ( - stopInference()} - /> - )} - {message.status !== MessageStatus.Pending && - message.id === messages[0]?.id && ( - { - const messageRequest: MessageRequest = { - id: message.id ?? '', - messages: messages - .slice(1, messages.length) - .reverse() - .map((e) => { - return { - content: e.content, - role: e.role, - } as ChatCompletionMessage - }), - threadId: message.threadId ?? '', - } - if (message.role === ChatCompletionRole.Assistant) { - deleteAMessage(message.id ?? '') - } - events.emit(EventName.OnNewMessageRequest, messageRequest) - }} - /> +
+ {message.status === MessageStatus.Pending && ( +
stopInference()} + > + +
)} - { - navigator.clipboard.writeText(message.content ?? '') - toaster({ - title: 'Copied to clipboard', - }) - }} - /> - { - deleteAMessage(message.id ?? '') - if (thread) - await pluginManager - .get(PluginType.Conversational) - ?.saveConversation({ - ...thread, - messages: messages.filter((e) => e.id !== message.id), - }) - }} - /> + {message.status !== MessageStatus.Pending && + message.id === messages[0]?.id && ( +
{ + const messageRequest: MessageRequest = { + id: message.id ?? '', + messages: messages + .slice(1, messages.length) + .reverse() + .map((e) => { + return { + content: e.content, + role: e.role, + } as ChatCompletionMessage + }), + threadId: message.threadId ?? '', + } + if (message.role === ChatCompletionRole.Assistant) { + deleteAMessage(message.id ?? '') + } + events.emit(EventName.OnNewMessageRequest, messageRequest) + }} + > + +
+ )} +
{ + navigator.clipboard.writeText(message.content ?? '') + toaster({ + title: 'Copied to clipboard', + }) + }} + > + +
+
{ + deleteAMessage(message.id ?? '') + if (thread) + await pluginManager + .get(PluginType.Conversational) + ?.saveConversation({ + ...thread, + messages: messages.filter((e) => e.id !== message.id), + }) + }} + > + +
+
) } diff --git a/web/screens/Chat/SimpleTextMessage/index.tsx b/web/screens/Chat/SimpleTextMessage/index.tsx index c12ab5287..bede6fcc1 100644 --- a/web/screens/Chat/SimpleTextMessage/index.tsx +++ b/web/screens/Chat/SimpleTextMessage/index.tsx @@ -5,6 +5,7 @@ import { ChatCompletionRole, MessageStatus, ThreadMessage } from '@janhq/core' import hljs from 'highlight.js' +import { useAtomValue } from 'jotai' import { Marked } from 'marked' import { markedHighlight } from 'marked-highlight' @@ -21,6 +22,8 @@ import { displayDate } from '@/utils/datetime' import MessageToolbar from '../MessageToolbar' +import { getCurrentChatMessagesAtom } from '@/helpers/atoms/ChatMessage.atom' + const marked = new Marked( markedHighlight({ langPrefix: 'hljs', @@ -55,6 +58,7 @@ const SimpleTextMessage: React.FC = (props) => { const [lastTimestamp, setLastTimestamp] = useState() const [tokenSpeed, setTokenSpeed] = useState(0) + const messages = useAtomValue(getCurrentChatMessagesAtom) useEffect(() => { if (props.status === MessageStatus.Ready || !experimentalFeatureEnabed) { @@ -73,22 +77,29 @@ const SimpleTextMessage: React.FC = (props) => { setTokenSpeed(averageTokenSpeed) setTokenCount(totalTokenCount) + // eslint-disable-next-line react-hooks/exhaustive-deps }, [props.content]) return ( -
+
{!isUser && !isSystem && }
{props.role}

{displayDate(props.createdAt)}

- {experimentalFeatureEnabed && ( -
+
)} @@ -113,7 +124,7 @@ const SimpleTextMessage: React.FC = (props) => {
{experimentalFeatureEnabed && (props.status === MessageStatus.Pending || tokenSpeed > 0) && ( -

+

Token Speed: {Number(tokenSpeed).toFixed(2)}/s

)}