"use client";
import styles from './page.module.css';
import { useState } from 'react';
import { useChat } from 'ai/react';
import { FunctionCallHandler, Message, nanoid } from 'ai';
import ReactMarkdown from "react-markdown";
import { Bot, User } from "lucide-react";
import { toast } from 'sonner';
import { FunctionIcon } from './icons';
const Page: React.FC = () => {
const functionCallHandler: FunctionCallHandler = async (
chatMessages,
functionCall,
) => {
let result;
const { name, arguments: args } = functionCall;
const response = await fetch("/api/functions", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
args: args,
name: name
})
} as any);
if (!response.ok) {
const errorText = await response.text();
toast.error(`Something went wrong: ${errorText}`);
return;
}
result = await response.text();
return {
messages: [
...chatMessages,
{
id: nanoid(),
name: functionCall.name,
role: "function" as const,
content: result,
},
],
};
};
const { messages, input, setInput, handleSubmit, isLoading } = useChat({
experimental_onFunctionCall: functionCallHandler,
onError: (error: any) => {
console.log(error);
},
});
const [isExpanded, setIsExpanded] = useState(false);
const toggleExpand = () => {
setIsExpanded(!isExpanded);
};
const roleUIConfig: {
[key: string]: {
avatar: JSX.Element;
bgColor: string;
avatarColor: string;
// eslint-disable-next-line no-unused-vars
dialogComponent: (message: Message) => JSX.Element;
};
} = {
user: {
avatar: