diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6deaee8946..0c4de59b2e 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -7199,6 +7199,7 @@ async def model_info_v2( "/model/metrics", description="View number of requests & avg latency per model on config.yaml", tags=["model management"], + include_in_schema=False, dependencies=[Depends(user_api_key_auth)], ) async def model_metrics( diff --git a/ui/litellm-dashboard/src/components/model_dashboard.tsx b/ui/litellm-dashboard/src/components/model_dashboard.tsx index a083fdf844..e8d05a43b4 100644 --- a/ui/litellm-dashboard/src/components/model_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/model_dashboard.tsx @@ -15,7 +15,7 @@ import { } from "@tremor/react"; import { TabPanel, TabPanels, TabGroup, TabList, Tab, TextInput, Icon } from "@tremor/react"; import { Select, SelectItem, MultiSelect, MultiSelectItem } from "@tremor/react"; -import { modelInfoCall, userGetRequesedtModelsCall, modelMetricsCall, modelCreateCall, Model, modelCostMap, modelDeleteCall, healthCheckCall } from "./networking"; +import { modelInfoCall, userGetRequesedtModelsCall, modelCreateCall, Model, modelCostMap, modelDeleteCall, healthCheckCall } from "./networking"; import { BarChart } from "@tremor/react"; import { Button as Button2, @@ -78,7 +78,6 @@ const ModelDashboard: React.FC = ({ userID, }) => { const [modelData, setModelData] = useState({ data: [] }); - const [modelMetrics, setModelMetrics] = useState([]); const [pendingRequests, setPendingRequests] = useState([]); const [form] = Form.useForm(); const [modelMap, setModelMap] = useState(null); @@ -136,14 +135,7 @@ const ModelDashboard: React.FC = ({ console.log("Model data response:", modelDataResponse.data); setModelData(modelDataResponse); - const modelMetricsResponse = await modelMetricsCall( - accessToken, - userID, - userRole - ); - - console.log("Model metrics response:", modelMetricsResponse); - setModelMetrics(modelMetricsResponse); + // if userRole is Admin, show the pending requests if (userRole === "Admin" && accessToken) { @@ -484,30 +476,7 @@ const ModelDashboard: React.FC = ({ - - Model Statistics (Number Requests) - - - - Model Statistics (Latency) - - + diff --git a/ui/litellm-dashboard/src/components/usage.tsx b/ui/litellm-dashboard/src/components/usage.tsx index 8900a25995..38811c192c 100644 --- a/ui/litellm-dashboard/src/components/usage.tsx +++ b/ui/litellm-dashboard/src/components/usage.tsx @@ -11,7 +11,8 @@ import { adminTopKeysCall, adminTopModelsCall, teamSpendLogsCall, - tagsSpendLogsCall + tagsSpendLogsCall, + modelMetricsCall, } from "./networking"; import { start } from "repl"; @@ -143,6 +144,8 @@ const UsagePage: React.FC = ({ const [topTagsData, setTopTagsData] = useState([]); const [uniqueTeamIds, setUniqueTeamIds] = useState([]); const [totalSpendPerTeam, setTotalSpendPerTeam] = useState([]); + const [modelMetrics, setModelMetrics] = useState([]); + const [modelLatencyMetrics, setModelLatencyMetrics] = useState([]); const firstDay = new Date( currentDate.getFullYear(), @@ -223,6 +226,8 @@ const UsagePage: React.FC = ({ //get top tags const top_tags = await tagsSpendLogsCall(accessToken); setTopTagsData(top_tags.top_10_tags); + + } else if (userRole == "App Owner") { await userSpendLogsCall( accessToken, @@ -259,6 +264,21 @@ const UsagePage: React.FC = ({ } }); } + + const modelMetricsResponse = await modelMetricsCall( + accessToken, + userID, + userRole + ); + + console.log("Model metrics response:", modelMetricsResponse); + // Sort by latency (avg_latency_seconds) + const sortedByLatency = [...modelMetricsResponse].sort((a, b) => b.avg_latency_seconds - a.avg_latency_seconds); + console.log("Sorted by latency:", sortedByLatency); + + setModelMetrics(modelMetricsResponse); + setModelLatencyMetrics(sortedByLatency); + } catch (error) { console.error("There was an error fetching the data", error); // Optionally, update your UI to reflect the error state here as well @@ -281,6 +301,7 @@ const UsagePage: React.FC = ({ All Up Team Based Usage Tag Based Usage + Model Based Usage @@ -420,6 +441,36 @@ const UsagePage: React.FC = ({ + + + + Number Requests per Model + + + + Latency Per Model + + + +