diff --git a/ui/litellm-dashboard/src/components/model_dashboard.tsx b/ui/litellm-dashboard/src/components/model_dashboard.tsx index 6067fc68610..a454399f09b 100644 --- a/ui/litellm-dashboard/src/components/model_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/model_dashboard.tsx @@ -1,9 +1,9 @@ import React, { useState, useEffect } from "react"; -import { Card, Title, Table, TableHead, TableRow, TableCell, TableBody } from "@tremor/react"; +import { Card, Title, Subtitle, Table, TableHead, TableRow, TableCell, TableBody, Metric, Grid } from "@tremor/react"; import { modelInfoCall } from "./networking"; interface ModelDashboardProps { - accessToken: string | null; + accessToken: string; token: string | null; userRole: string | null; userID: string | null; @@ -21,8 +21,8 @@ const ModelDashboard: React.FC = ({ const fetchData = async () => { try { // Replace with your actual API call for model data - const modelDataResponse = await modelInfoCall(accessToken, token, userRole, userID); - + const modelDataResponse = await modelInfoCall(accessToken, userID, userRole); + console.log("Model data response:", modelDataResponse.data); setModelData(modelDataResponse); } catch (error) { console.error("There was an error fetching the model data", error); @@ -34,28 +34,87 @@ const ModelDashboard: React.FC = ({ } }, [accessToken, token, userRole, userID]); + if (!modelData) { + return
Loading...
; + } + + // loop through model data and edit each row + for (let i = 0; i < modelData.data.length; i++) { + let curr_model = modelData.data[i]; + let litellm_model_name = curr_model?.litellm_params?.model; + + let model_info = curr_model?.model_info; + + let defaultProvider = "openai"; + let provider = ""; + let input_cost = "Undefined" + let output_cost = "Undefined" + let max_tokens = "Undefined" + + // Check if litellm_model_name is null or undefined + if (litellm_model_name) { + // Split litellm_model_name based on "/" + let splitModel = litellm_model_name.split("/"); + + // Get the first element in the split + let firstElement = splitModel[0]; + + // If there is only one element, default provider to openai + provider = splitModel.length === 1 ? defaultProvider : firstElement; + + console.log("Provider:", provider); + } else { + // litellm_model_name is null or undefined, default provider to openai + provider = defaultProvider; + console.log("Provider:", provider); + } + + if (model_info) { + input_cost = model_info?.input_cost_per_token; + output_cost = model_info?.output_cost_per_token; + max_tokens = model_info?.max_tokens; + + } + modelData.data[i].provider = provider + modelData.data[i].input_cost = input_cost + modelData.data[i].output_cost = output_cost + modelData.data[i].max_tokens = max_tokens + + } + + return (
+ - Models Page + Available Models Model Name - Model Info + Provider + Input Price per token ($) + Output Price per token ($) + Max Tokens {modelData.data.map((model: any) => ( - {model.model_name} - {/* {model.model_info} */} - {/* Add other TableCell for Model Info if needed */} + +

{model.model_name}

+ {model.provider} + {model.input_cost} + {model.output_cost} + {model.max_tokens} + +
))}
+
); };