import { ChatCompletionRole, ConversationalExtension, ExtensionTypeEnum, MessageStatus, ThreadMessage, } from '@janhq/core' import { Button } from '@janhq/uikit' import { useAtomValue, useSetAtom } from 'jotai' import { RefreshCcw } from 'lucide-react' import useSendChatMessage from '@/hooks/useSendChatMessage' import { extensionManager } from '@/extension' import { deleteMessageAtom, getCurrentChatMessagesAtom, } from '@/helpers/atoms/ChatMessage.atom' import { activeThreadAtom } from '@/helpers/atoms/Thread.atom' const ErrorMessage = ({ message }: { message: ThreadMessage }) => { const messages = useAtomValue(getCurrentChatMessagesAtom) const thread = useAtomValue(activeThreadAtom) const deleteMessage = useSetAtom(deleteMessageAtom) const { resendChatMessage } = useSendChatMessage() const regenerateMessage = async () => { const lastMessageIndex = messages.length - 1 const message = messages[lastMessageIndex] if (message.role !== ChatCompletionRole.User) { // Delete last response before regenerating deleteMessage(message.id ?? '') if (thread) { await extensionManager .get(ExtensionTypeEnum.Conversational) ?.writeMessages( thread.id, messages.filter((msg) => msg.id !== message.id) ) } const targetMessage = messages[lastMessageIndex - 1] if (targetMessage) resendChatMessage(targetMessage) } else { resendChatMessage(message) } } return ( <> {message.status === MessageStatus.Stopped && (
Oops! The generation was interrupted. Let's give it another go!
)} {message.status === MessageStatus.Error && (

Apologies, something's amiss!

Jan's in beta. Find troubleshooting guides{' '} here {' '} or reach out to us on{' '} Discord {' '} for assistance.
)} ) } export default ErrorMessage