"use client"; import { useRouter } from "next/navigation"; import { ChatCompletion } from "@/lib/types"; import { truncateText } from "@/lib/truncate-text"; import { extractTextFromContentPart, extractDisplayableText, } from "@/lib/format-message-content"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Skeleton } from "@/components/ui/skeleton"; interface ChatCompletionsTableProps { completions: ChatCompletion[]; isLoading: boolean; error: Error | null; } export function ChatCompletionsTable({ completions, isLoading, error, }: ChatCompletionsTableProps) { const router = useRouter(); const tableHeader = ( Input Output Model Created ); if (isLoading) { return ( {tableHeader} {[...Array(3)].map((_, i) => ( ))}
); } if (error) { return (

Error fetching data: {error.message || "An unknown error occurred"}

); } if (completions.length === 0) { return

No chat completions found.

; } return ( A list of your recent chat completions. {tableHeader} {completions.map((completion) => ( router.push(`/logs/chat-completions/${completion.id}`) } className="cursor-pointer hover:bg-muted/50" > {truncateText( extractTextFromContentPart( completion.input_messages?.[0]?.content, ), )} {(() => { const message = completion.choices?.[0]?.message; const outputText = extractDisplayableText(message); return truncateText(outputText); })()} {completion.model} {new Date(completion.created * 1000).toLocaleString()} ))}
); }