From 193ed3b53734eac924ed7efff671e90656d1ef98 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Thu, 13 Mar 2025 19:44:00 -0700 Subject: [PATCH] use table view --- .../src/components/top_key_view.tsx | 97 ++++++++++++++++--- ui/litellm-dashboard/src/components/usage.tsx | 3 +- 2 files changed, 85 insertions(+), 15 deletions(-) diff --git a/ui/litellm-dashboard/src/components/top_key_view.tsx b/ui/litellm-dashboard/src/components/top_key_view.tsx index c88c308d7f..11c7877f9c 100644 --- a/ui/litellm-dashboard/src/components/top_key_view.tsx +++ b/ui/litellm-dashboard/src/components/top_key_view.tsx @@ -3,6 +3,9 @@ import { BarChart } from "@tremor/react"; import KeyInfoView from "./key_info_view"; import { keyInfoV1Call } from "./networking"; import { transformKeyInfo } from "../components/key_team_helpers/transform_key_info"; +import { DataTable } from "./view_logs/table"; +import { Tooltip } from "antd"; +import { Button } from "@tremor/react"; interface TopKeyViewProps { topKeys: any[]; @@ -22,6 +25,7 @@ const TopKeyView: React.FC = ({ const [isModalOpen, setIsModalOpen] = useState(false); const [selectedKey, setSelectedKey] = useState(null); const [keyData, setKeyData] = useState(undefined); + const [viewMode, setViewMode] = useState<'chart' | 'table'>('table'); const handleKeyClick = async (item: any) => { if (!accessToken) return; @@ -62,22 +66,87 @@ const TopKeyView: React.FC = ({ return () => document.removeEventListener('keydown', handleEscapeKey); }, [isModalOpen]); + // Define columns for the table view + const columns = [ + { + header: "Key", + accessorKey: "api_key", + cell: (info: any) => ( +
+ + + +
+ ), + }, + { + header: "Key Alias", + accessorKey: "key_alias", + cell: (info: any) => info.getValue() || "-", + }, + { + header: "Spend (USD)", + accessorKey: "spend", + cell: (info: any) => `$${Number(info.getValue()).toFixed(2)}`, + }, + ]; + return ( <> - `$${value.toFixed(2)}`} - onValueChange={(item) => handleKeyClick(item)} - /> +
+
+ + +
+
+ + {viewMode === 'chart' ? ( +
+
Click on any key to view detailed information
+ `$${value.toFixed(2)}`} + onValueChange={(item) => handleKeyClick(item)} + showTooltip={true} + /> +
+ ) : ( +
+ <>} + getRowCanExpand={() => false} + isLoading={false} + /> +
+ )} {isModalOpen && selectedKey && keyData && (
= ({ async () => { const top_keys = await adminTopKeysCall(accessToken); return top_keys.map((k: any) => ({ - key: (k["key_alias"] || k["key_name"] || k["api_key"]).substring(0, 10), + key: (k["api_key"]).substring(0, 10), api_key: k["api_key"], + key_alias: k["key_alias"], spend: Number(k["total_spend"].toFixed(2)), })); },