diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx index 12eea2dd8ecc..d7e77775683c 100644 --- a/ui/litellm-dashboard/src/components/networking.tsx +++ b/ui/litellm-dashboard/src/components/networking.tsx @@ -162,3 +162,32 @@ export const keySpendLogsCall = async (accessToken: String, token: String) => { throw error; } }; + + + +export const spendUsersCall = async (accessToken: String, userID: String) => { + try { + const url = proxyBaseUrl ? `${proxyBaseUrl}/spend/users` : `/spend/users`; + console.log("in spendUsersCall:", url); + const response = await fetch(`${url}/?user_id=${userID}`, { + method: "GET", + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + }); + if (!response.ok) { + const errorData = await response.text(); + message.error(errorData); + throw new Error("Network response was not ok"); + } + + const data = await response.json(); + console.log(data); + return data; + } catch (error) { + console.error("Failed to get spend for user", error); + throw error; + } +}; + diff --git a/ui/litellm-dashboard/src/components/user_dashboard.tsx b/ui/litellm-dashboard/src/components/user_dashboard.tsx index b1a06939b166..6310de0e53cb 100644 --- a/ui/litellm-dashboard/src/components/user_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/user_dashboard.tsx @@ -120,7 +120,7 @@ const UserDashboard = () => { - + = ({ userID, userSpendData }) => { +const ViewUserSpend: React.FC = ({ userID, userSpendData, userRole, accessToken }) => { console.log("User SpendData:", userSpendData); - const spend = userSpendData?.spend; - const maxBudget = userSpendData?.max_budget || null; + const [spend, setSpend] = useState(userSpendData?.spend); + const [maxBudget, setMaxBudget] = useState(userSpendData?.max_budget || null); + + useEffect(() => { + const fetchData = async () => { + if (userRole === "Admin") { + try { + const data = await spendUsersCall(accessToken, "litellm-proxy-budget"); + console.log("Result from callSpendUsers:", data); + const total_budget = data[0] + setSpend(total_budget?.spend); + setMaxBudget(total_budget?.max_budget || null); + } catch (error) { + console.error("Failed to get spend for user", error); + } + } + }; + + fetchData(); + }, [userRole, accessToken, userID]); + const displayMaxBudget = maxBudget !== null ? `$${maxBudget} limit` : "No limit"; - const displayText = `$${spend} / ${displayMaxBudget}`; return ( <>