diff --git a/ui/litellm-dashboard/src/components/model_dashboard.tsx b/ui/litellm-dashboard/src/components/model_dashboard.tsx index 0d54e4bb8..2ec5c6089 100644 --- a/ui/litellm-dashboard/src/components/model_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/model_dashboard.tsx @@ -113,8 +113,8 @@ interface RetryPolicyObject { interface GlobalExceptionActivityData { - sum_num_exceptions: number; - daily_data: { date: string; num_exceptions: number; }[]; + sum_num_rate_limit_exceptions: number; + daily_data: { date: string; num_rate_limit_exceptions: number; }[]; } @@ -310,7 +310,8 @@ const ModelDashboard: React.FC = ({ useState(null); const [defaultRetry, setDefaultRetry] = useState(0); - const [globalExceptionData, setGlobalExceptionData] = useState([]); + const [globalExceptionData, setGlobalExceptionData] = useState({} as GlobalExceptionActivityData); + const [globalExceptionPerDeployment, setGlobalExceptionPerDeployment] = useState([]); function formatCreatedAt(createdAt: string | null) { if (createdAt) { @@ -654,14 +655,29 @@ const ModelDashboard: React.FC = ({ dateValue.to?.toISOString() ); - const dailExceptions = await adminGlobalActivityExceptions( + const dailyExceptions = await adminGlobalActivityExceptions( accessToken, + dateValue.from?.toISOString().split('T')[0], + dateValue.to?.toISOString().split('T')[0], _initial_model_group, - dateValue.from?.toISOString(), - dateValue.to?.toISOString() ); + setGlobalExceptionData(dailyExceptions); + const dailyExceptionsPerDeplyment = await adminGlobalActivityExceptionsPerDeployment( + accessToken, + dateValue.from?.toISOString().split('T')[0], + dateValue.to?.toISOString().split('T')[0], + _initial_model_group, + ) + + setGlobalExceptionPerDeployment(dailyExceptionsPerDeplyment); + + console.log("dailyExceptions:", dailyExceptions); + + console.log("dailyExceptionsPerDeplyment:", dailyExceptionsPerDeplyment); + + console.log("slowResponses:", slowResponses); setSlowResponsesData(slowResponses); @@ -924,6 +940,30 @@ const ModelDashboard: React.FC = ({ console.log("slowResponses:", slowResponses); setSlowResponsesData(slowResponses); + + + if (modelGroup) { + const dailyExceptions = await adminGlobalActivityExceptions( + accessToken, + startTime?.toISOString().split('T')[0], + endTime?.toISOString().split('T')[0], + modelGroup, + ); + + setGlobalExceptionData(dailyExceptions); + + const dailyExceptionsPerDeplyment = await adminGlobalActivityExceptionsPerDeployment( + accessToken, + startTime?.toISOString().split('T')[0], + endTime?.toISOString().split('T')[0], + modelGroup, + ) + + setGlobalExceptionPerDeployment(dailyExceptionsPerDeplyment); + + } + + } catch (error) { console.error("Failed to fetch model metrics", error); } @@ -1801,17 +1841,110 @@ const ModelDashboard: React.FC = ({ - - Exceptions per Model - - + + + + All Up Rate Limit Errors (429) for {selectedModelGroup} + + + Num Rate Limit Errors { (globalExceptionData.sum_num_rate_limit_exceptions)} + console.log(v)} + /> + + + + {/* */} + + + + + + + + + + { + premiumUser ? ( + <> + {globalExceptionPerDeployment.map((globalActivity, index) => ( + + {globalActivity.api_base ? globalActivity.api_base : "Unknown API Base"} + + + Num Rate Limit Errors (429) {(globalActivity.sum_num_rate_limit_exceptions)} + console.log(v)} + /> + + + + + ))} + + ) : + <> + {globalExceptionPerDeployment && globalExceptionPerDeployment.length > 0 && + globalExceptionPerDeployment.slice(0, 1).map((globalActivity, index) => ( + + ✨ Rate Limit Errors by Deployment +

Upgrade to see exceptions for all deployments

+ + + {globalActivity.api_base} + + + + Num Rate Limit Errors {(globalActivity.sum_num_rate_limit_exceptions)} + + console.log(v)} + /> + + + + + +
+ ))} + + } +
+
diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx index d80816638..769e3b834 100644 --- a/ui/litellm-dashboard/src/components/networking.tsx +++ b/ui/litellm-dashboard/src/components/networking.tsx @@ -1246,7 +1246,8 @@ export const adminGlobalActivityExceptions = async ( export const adminGlobalActivityExceptionsPerDeployment = async ( accessToken: String, startTime: String | undefined, - endTime: String | undefined + endTime: String | undefined, + modelGroup: String, ) => { try { let url = proxyBaseUrl @@ -1257,6 +1258,10 @@ export const adminGlobalActivityExceptionsPerDeployment = async ( url += `?start_date=${startTime}&end_date=${endTime}`; } + if (modelGroup) { + url += `&model_group=${modelGroup}`; + } + const requestOptions: { method: string; headers: {