import { Fragment } from 'react' import ScrollToBottom from 'react-scroll-to-bottom' import { InferenceEngine, MessageStatus } from '@janhq/core' import { Button } from '@janhq/uikit' import { useAtomValue } from 'jotai' import LogoMark from '@/containers/Brand/Logo/Mark' import GenerateResponse from '@/containers/Loader/GenerateResponse' import { MainViewState } from '@/constants/screens' import { activeModelAtom } from '@/hooks/useActiveModel' import { useGetDownloadedModels } from '@/hooks/useGetDownloadedModels' import useInference from '@/hooks/useInference' import { useMainViewState } from '@/hooks/useMainViewState' import ChatItem from '../ChatItem' import ErrorMessage from '../ErrorMessage' import { getCurrentChatMessagesAtom } from '@/helpers/atoms/ChatMessage.atom' const ChatBody: React.FC = () => { const messages = useAtomValue(getCurrentChatMessagesAtom) const activeModel = useAtomValue(activeModelAtom) const { downloadedModels } = useGetDownloadedModels() const { setMainViewState } = useMainViewState() const { isGeneratingResponse } = useInference() if (downloadedModels.length === 0) return (

Welcome!

You need to download your first model

) const showOnboardingStep = downloadedModels.filter((e) => e.engine === InferenceEngine.nitro) .length === 0 return ( {messages.length === 0 ? (
{showOnboardingStep ? ( <>

{`You don't have a local model yet.`}

) : (

How can I help you?

)}
) : ( {messages.map((message, index) => (
{(message.status !== MessageStatus.Pending || message.content.length > 0) && ( )} {(message.status === MessageStatus.Error || message.status === MessageStatus.Stopped) && index === messages.length - 1 && ( )}
))} {activeModel && (isGeneratingResponse || (messages.length && messages[messages.length - 1].status === MessageStatus.Pending && !messages[messages.length - 1].content.length)) && ( )}
)}
) } export default ChatBody