diff --git a/ui/litellm-dashboard/src/components/user_dashboard.tsx b/ui/litellm-dashboard/src/components/user_dashboard.tsx index f27358e07a0..d0dac5180c5 100644 --- a/ui/litellm-dashboard/src/components/user_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/user_dashboard.tsx @@ -244,6 +244,8 @@ const UserDashboard: React.FC = ({ userRole={userRole} accessToken={accessToken} userSpend={teamSpend} + selectedTeam = {selectedTeam ? selectedTeam : null} + /> = ({ userID, userRole, accessToken, userSpend }) => { +const ViewUserSpend: React.FC = ({ userID, userRole, accessToken, userSpend, selectedTeam }) => { console.log(`userSpend: ${userSpend}`) let [spend, setSpend] = useState(userSpend !== null ? userSpend : 0.0); const [maxBudget, setMaxBudget] = useState(0.0); + const [userModels, setUserModels] = useState([]); useEffect(() => { const fetchData = async () => { if (!accessToken || !userID || !userRole) { @@ -62,9 +68,30 @@ const ViewUserSpend: React.FC = ({ userID, userRole, accessT } } }; + const fetchUserModels = async () => { + try { + if (userID === null || userRole === null) { + return; + } + + if (accessToken !== null) { + const model_available = await modelAvailableCall(accessToken, userID, userRole); + let available_model_names = model_available["data"].map( + (element: { id: string }) => element.id + ); + console.log("available_model_names:", available_model_names); + setUserModels(available_model_names); + } + } catch (error) { + console.error("Error fetching user models:", error); + } + }; + fetchUserModels(); fetchData(); - }, [userRole, accessToken]); + }, [userRole, accessToken, userID]); + + useEffect(() => { if (userSpend !== null) { @@ -72,18 +99,50 @@ const ViewUserSpend: React.FC = ({ userID, userRole, accessT } }, [userSpend]) + // logic to decide what models to display + let modelsToDisplay = []; + if (selectedTeam && selectedTeam.models) { + modelsToDisplay = selectedTeam.models; + } + + // check if "all-proxy-models" is in modelsToDisplay + if (modelsToDisplay && modelsToDisplay.includes("all-proxy-models")) { + console.log("user models:", userModels); + modelsToDisplay = userModels; + } + + const displayMaxBudget = maxBudget !== null ? `$${maxBudget} limit` : "No limit"; const roundedSpend = spend !== undefined ? spend.toFixed(4) : null; console.log(`spend in view user spend: ${spend}`) return ( - <> -

Total Spend

-

${roundedSpend}

- - - ) +
+
+

+ Total Spend{" "} +

+

+ ${roundedSpend} +

+
+
+ + Models + + + {modelsToDisplay.map((model: string) => ( + + {model} + + ))} + + + +
+
+ ); } export default ViewUserSpend;