"use client"; import { useState } from 'react'; import Image from 'next/image'; import { useToast } from "@/hooks/use-toast"; import { generateChatbotResponse } from '@/ai/flows/generate-chatbot-response'; import type { Message } from '@/lib/types'; import MessageList from './message-list'; import MessageForm from './message-form'; import { ThemeToggle } from './theme-toggle'; import { Bot, X } from 'lucide-react'; import { Button } from './ui/button'; export function Chat() { const [messages, setMessages] = useState([ { id: '1', role: 'assistant', content: "जय जोहार! मैं चत्तीसवाणी हावंव। आप मन के का मदद कर सकत हंव?", }, ]); const [input, setInput] = useState(''); const [file, setFile] = useState(null); const [isLoading, setIsLoading] = useState(false); const { toast } = useToast(); const handleFileChange = (e: React.ChangeEvent) => { if (e.target.files?.[0]) { setFile(e.target.files[0]); } }; const handleRemoveFile = () => { setFile(null); } const fileToDataUri = (file: File): Promise => new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result as string); reader.onerror = reject; reader.readAsDataURL(file); }); const handleSendMessage = async (e: React.FormEvent) => { e.preventDefault(); if ((!input.trim() && !file) || isLoading) return; setIsLoading(true); let fileDataUri: string | undefined = undefined; let previewUrl: string | undefined = undefined; if (file) { previewUrl = URL.createObjectURL(file); fileDataUri = await fileToDataUri(file); } const userMessage: Message = { id: Date.now().toString(), role: 'user', content: input, imageUrl: previewUrl, }; setMessages((prev) => [...prev, userMessage]); const currentInput = input; setInput(''); setFile(null); try { const chatHistory = [...messages, userMessage].map(({ role, content }) => ({ role, content })); const response = await generateChatbotResponse({ message: currentInput, chatHistory, photoDataUri: fileDataUri }); const assistantMessage: Message = { id: (Date.now() + 1).toString(), role: 'assistant', content: response.response, }; setMessages((prev) => [...prev, assistantMessage]); } catch (error) { console.error("Error generating chatbot response:", error); toast({ variant: "destructive", title: "Oh no! Something went wrong.", description: "There was a problem with our AI. Please try again later.", }); const errorMessage: Message = { id: (Date.now() + 1).toString(), role: 'assistant', content: "Sorry, I'm having a little trouble right now. Please try again in a moment.", }; setMessages((prev) => [...prev, errorMessage]); } finally { setIsLoading(false); // Clean up the object URL if (previewUrl) { URL.revokeObjectURL(previewUrl); } } }; return (

ChhattisVani

29.05.02 beta
{file && (
File preview {file.name}
)}

created with ❤️ by sameer banchhor

); }