"use client" import type React from "react" import { useRef, useEffect } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { ScrollArea } from "@/components/ui/scroll-area" import { Loader2, Send } from "lucide-react" import { useChat } from '@ai-sdk/react'; import { ToolInvocation } from 'ai'; interface ChatPanelProps { onDisplayChart: (xml: string) => void; onFetchChart: () => string; } export default function ChatPanel({ onDisplayChart, onFetchChart }: ChatPanelProps) { const { messages, input, handleInputChange, handleSubmit, isLoading, error, addToolResult } = useChat({ async onToolCall({ toolCall }) { console.log("Tool call:", toolCall); if (toolCall.toolName === "display_flow_chart") { const { xml } = toolCall.args as { xml: string }; onDisplayChart(xml); } else if (toolCall.toolName === "fetch_flow_chart") { const currentXML = onFetchChart(); console.log("Current XML:", currentXML); addToolResult({ toolCallId: toolCall.toolCallId, result: currentXML }); } }, onError: (error) => { console.error("Chat error:", error); } }) const messagesEndRef = useRef(null) // Scroll to bottom when messages change useEffect(() => { if (messagesEndRef.current) { messagesEndRef.current.scrollIntoView({ behavior: "smooth" }) } }, [messages]) const onFormSubmit = (e: React.FormEvent) => { e.preventDefault() if (input.trim() && !isLoading) { handleSubmit(e) } } return ( Chat with Diagram Generator {messages.length === 0 ? (

Start a conversation to generate or modify diagrams.

Try: "Create a flowchart for user authentication"

) : ( messages.map((message) => (
{message.content}
{(message as any).function_call && (
Using tool: {(message as any).function_call.name}...
)}
)) )} {error && (
Error: {error.message}
)}
) }