"use client"; import { ComposerAddAttachment, ComposerAttachments, UserMessageAttachments, } from "@/components/assistant-ui/attachment"; import { ContextDisplay } from "@/components/assistant-ui/context-display"; import { ModelSelector } from "@/components/assistant-ui/model-selector"; import { MarkdownText } from "@/components/assistant-ui/markdown-text"; import { isPiSteerQueueItemId, responseForRequest, usePiHostUiRequests, usePiRuntimeExtras, usePiThreadState, type PiHostUiRequest, type PiThinkingLevel, } from "@assistant-ui/react-pi"; import { usePiHandshake } from "../pi-handshake"; import { modelKey } from "@/lib/model-key"; import { ThinkingLevelSlider } from "./thinking-level-slider"; import { Reasoning, ReasoningContent, ReasoningRoot, ReasoningText, ReasoningTrigger, } from "@/components/assistant-ui/reasoning"; import { ToolGroupContent, ToolGroupRoot, ToolGroupTrigger, } from "@/components/assistant-ui/tool-group"; import { ToolFallback } from "@/components/assistant-ui/tool-fallback"; import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { ActionBarMorePrimitive, ActionBarPrimitive, AuiIf, BranchPickerPrimitive, ComposerPrimitive, ErrorPrimitive, groupPartByType, MessagePrimitive, SuggestionPrimitive, ThreadPrimitive, useAui, useAuiState, } from "@assistant-ui/react"; import { ArrowDownIcon, ArrowUpIcon, CheckIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DownloadIcon, ListEndIcon, MoreHorizontalIcon, PencilIcon, RefreshCwIcon, SquareIcon, Trash2Icon, WrenchIcon, } from "lucide-react"; import { useState, type FC } from "react"; export const Thread: FC = () => { return (
s.thread.isEmpty}>
{() => }
); }; const ThreadMessage: FC = () => { const role = useAuiState((s) => s.message.role); const isEditing = useAuiState((s) => s.message.composer.isEditing); if (isEditing) return ; if (role === "user") return ; return ; }; const ThreadScrollToBottom: FC = () => { return ( ); }; const ThreadWelcome: FC = () => { return (

Hello there!

How can I help you today?

); }; const ThreadSuggestions: FC = () => { return (
{() => }
); }; const ThreadSuggestionItem: FC = () => { return (
); }; const HostUiRequests: FC = () => { const { requests, respond } = usePiHostUiRequests(); const request = requests[0]; if (!request) return null; return ( ); }; const HostUiRequestCard: FC<{ request: PiHostUiRequest; respond: ReturnType["respond"]; }> = ({ request, respond }) => { const [value, setValue] = useState( request.kind === "editor" ? (request.prefill ?? "") : "", ); const submitValue = () => { void respond(responseForRequest(request, value)); }; return (
{request.title}
{request.kind === "confirm" ? (

{request.message}

) : request.kind === "select" ? (
{request.options.map((option) => ( ))}
) : request.kind === "editor" ? (