Spaces:
Running
Running
'use client'; | |
import { cn } from '@/lib/utils'; | |
import { ChatList } from '@/components/chat/ChatList'; | |
import { ChatPanel } from '@/components/chat/ChatPanel'; | |
import { ChatScrollAnchor } from '@/components/chat/ChatScrollAnchor'; | |
import { ChatEntity } from '@/lib/types'; | |
import Image from 'next/image'; | |
import useVisionAgent from '@/lib/hooks/useVisionAgent'; | |
export interface ChatProps extends React.ComponentProps<'div'> { | |
chat: ChatEntity; | |
} | |
export function Chat({ chat }: ChatProps) { | |
const { url, id } = chat; | |
const { messages, append, reload, stop, isLoading, input, setInput } = | |
useVisionAgent(chat); | |
return ( | |
<> | |
<div className={cn('pb-[150px] pt-4 md:pt-10 h-full')}> | |
<div className="flex h-full"> | |
<div className="w-1/2 relative border-r border-gray-400 overflow-auto p-4 flex items-center justify-center"> | |
<div className="max-h-[600px] size-full relative"> | |
<Image | |
draggable={false} | |
src={url} | |
alt={url} | |
fill | |
objectFit="contain" | |
/> | |
</div> | |
</div> | |
<div className="w-1/2 relative overflow-auto"> | |
<ChatList messages={messages} /> | |
<ChatScrollAnchor trackVisibility={isLoading} /> | |
</div> | |
</div> | |
</div> | |
<ChatPanel | |
id={id} | |
isLoading={isLoading} | |
stop={stop} | |
append={append} | |
reload={reload} | |
messages={messages} | |
input={input} | |
setInput={setInput} | |
/> | |
</> | |
); | |
} | |