import React, { useMemo } from 'react' import { ChatCompletionRole, ContentType, ThreadMessage } from '@janhq/core' import { Tooltip } from '@janhq/joi' import { useAtomValue } from 'jotai' import { FolderOpenIcon } from 'lucide-react' import 'katex/dist/katex.min.css' import { twMerge } from 'tailwind-merge' import LogoMark from '@/containers/Brand/Logo/Mark' import { usePath } from '@/hooks/usePath' import { displayDate } from '@/utils/datetime' import EditChatInput from '../EditChatInput' import MessageToolbar from '../MessageToolbar' import { MarkdownTextMessage } from './MarkdownTextMessage' import { editMessageAtom, getCurrentChatMessagesAtom, tokenSpeedAtom, } from '@/helpers/atoms/ChatMessage.atom' import { activeThreadAtom } from '@/helpers/atoms/Thread.atom' const TextMessage: React.FC = (props) => { const isUser = props.role === ChatCompletionRole.User const isSystem = props.role === ChatCompletionRole.System const editMessage = useAtomValue(editMessageAtom) const activeThread = useAtomValue(activeThreadAtom) const tokenSpeed = useAtomValue(tokenSpeedAtom) const messages = useAtomValue(getCurrentChatMessagesAtom) const text = useMemo( () => props.content[0]?.text?.value ?? '', [props.content] ) return (
{!isUser && !isSystem && } {isUser && (
)}
{isUser ? props.role : (activeThread?.assistants[0].assistant_name ?? props.role)}

{displayDate(props.created)}

{tokenSpeed && tokenSpeed.message === props.id && tokenSpeed.tokenSpeed > 0 && (

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

)}
<> {editMessage === props.id ? (
) : (
)}
) } export default React.memo(TextMessage)