'use client'; import { Conversation, ConversationContent, ConversationScrollButton, } from '@/components/ai-elements/conversation'; import { Loader } from '@/components/ai-elements/loader'; import { Message, MessageContent } from '@/components/ai-elements/message'; import { PromptInput, PromptInputButton, PromptInputModelSelect, PromptInputModelSelectContent, PromptInputModelSelectItem, PromptInputModelSelectTrigger, PromptInputModelSelectValue, PromptInputSubmit, PromptInputTextarea, PromptInputToolbar, PromptInputTools, } from '@/components/ai-elements/prompt-input'; import { Reasoning, ReasoningContent, ReasoningTrigger, } from '@/components/ai-elements/reasoning'; import { Response } from '@/components/ai-elements/response'; import { Source, Sources, SourcesContent, SourcesTrigger, } from '@/components/ai-elements/source'; import { useChat } from '@ai-sdk/react'; import { GlobeIcon } from 'lucide-react'; import { useState } from 'react'; const models = [ { name: 'GPT 4o', value: 'openai/gpt-4o', }, { name: 'Deepseek R1', value: 'deepseek/deepseek-r1', }, ]; export default function ChatBot() { const [input, setInput] = useState(''); const [model, setModel] = useState(models[0].value); const [webSearch, setWebSearch] = useState(false); const { messages, sendMessage, status } = useChat(); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (input.trim()) { sendMessage( { text: input }, { body: { model: model, webSearch: webSearch, }, } ); setInput(''); } }; return (
{messages.map((message) => (
{message.role === 'assistant' && ( {message.parts.map((part, i) => { switch (part.type) { case 'source-url': return ( <> part.type === 'source-url' ).length } /> ); } })} )} {message.parts.map((part, i) => { switch (part.type) { case 'text': return ( {part.text} ); case 'reasoning': return ( {part.text} ); default: return null; } })}
))} {status === 'submitted' && }
setInput(e.target.value)} value={input} /> setWebSearch(!webSearch)} > Search { setModel(value); }} value={model} > {models.map((model) => ( {model.name} ))}
); }