"use client"; import { useMemo } from "react"; import { AssistantRuntimeProvider, AssistantCloud } from "@assistant-ui/react"; import { useChatRuntime, AssistantChatTransport, } from "@assistant-ui/react-ai-sdk"; import { lastAssistantMessageIsCompleteWithToolCalls } from "ai"; import { Thread } from "@/components/assistant-ui/thread"; import { SidebarInset, SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar"; import { ThreadListSidebar } from "@/components/assistant-ui/threadlist-sidebar"; import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbSeparator, BreadcrumbPage, } from "@/components/ui/breadcrumb"; import { Separator } from "@/components/ui/separator"; import { useAuth, UserButton, useUser } from "@clerk/nextjs"; export const Assistant = () => { const { getToken } = useAuth(); const { user } = useUser(); const cloud = useMemo( () => new AssistantCloud({ baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL!, authToken: async () => { const token = await getToken({ template: "assistant-ui" }); if (!token) throw new Error("Missing Clerk JWT"); return token; }, }), [getToken], ); const runtime = useChatRuntime({ cloud, sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls, transport: new AssistantChatTransport({ api: "/api/chat", }), }); return (
Build Your Own ChatGPT UX Starter Template
{`Welcome${user?.firstName ? `, ${user.firstName}` : ""}`}
); };