import { useMemo } from "react"; import { useAPI } from "../contexts/APIProvider"; const formatSpeed = (speed: number): string => { return speed < 0 ? "unknown" : speed.toFixed(2) + " t/s"; }; const formatDuration = (ms: number): string => { return (ms / 1000).toFixed(2) + "s"; }; const formatRelativeTime = (timestamp: string): string => { const now = new Date(); const date = new Date(timestamp); const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000); // Handle future dates by returning "just now" if (diffInSeconds < 5) { return "now"; } if (diffInSeconds < 60) { return `${diffInSeconds}s ago`; } const diffInMinutes = Math.floor(diffInSeconds / 60); if (diffInMinutes < 60) { return `${diffInMinutes}m ago`; } const diffInHours = Math.floor(diffInMinutes / 60); if (diffInHours < 24) { return `${diffInHours}h ago`; } return "a while ago"; }; const ActivityPage = () => { const { metrics } = useAPI(); const sortedMetrics = useMemo(() => { return [...metrics].sort((a, b) => b.id - a.id); }, [metrics]); return (
No metrics data available
| ID | Time | Model |
Cached |
Prompt |
Generated | Prompt Processing | Generation Speed | Duration |
|---|---|---|---|---|---|---|---|---|
| {metric.id + 1 /* un-zero index */} | {formatRelativeTime(metric.timestamp)} | {metric.model} | {metric.cache_tokens > 0 ? metric.cache_tokens.toLocaleString() : "-"} | {metric.input_tokens.toLocaleString()} | {metric.output_tokens.toLocaleString()} | {formatSpeed(metric.prompt_per_second)} | {formatSpeed(metric.tokens_per_second)} | {formatDuration(metric.duration_ms)} |