diff --git a/ui/litellm-dashboard/src/components/model_dashboard.tsx b/ui/litellm-dashboard/src/components/model_dashboard.tsx index 89061d9169e..18e29ebd858 100644 --- a/ui/litellm-dashboard/src/components/model_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/model_dashboard.tsx @@ -86,6 +86,8 @@ import type { UploadProps } from "antd"; import { Upload } from "antd"; import TimeToFirstToken from "./model_metrics/time_to_first_token"; import DynamicFields from "./model_add/dynamic_form"; +import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"; + interface ModelDashboardProps { accessToken: string | null; token: string | null; @@ -269,6 +271,8 @@ const ModelDashboard: React.FC = ({ const [selectedProvider, setSelectedProvider] = useState("OpenAI"); const [healthCheckResponse, setHealthCheckResponse] = useState(""); const [editModalVisible, setEditModalVisible] = useState(false); + const [infoModalVisible, setInfoModalVisible] = useState(false); + const [selectedModel, setSelectedModel] = useState(null); const [availableModelGroups, setAvailableModelGroups] = useState< Array @@ -297,6 +301,15 @@ const ModelDashboard: React.FC = ({ useState(null); const [defaultRetry, setDefaultRetry] = useState(0); + function formatCreatedAt(createdAt: string | null) { + if (createdAt) { + const date = new Date(createdAt); + const options = { month: 'long', day: 'numeric', year: 'numeric' }; + return date.toLocaleDateString('en-US'); + } + return null; + } + const EditModelModal: React.FC = ({ visible, onCancel, @@ -423,11 +436,21 @@ const ModelDashboard: React.FC = ({ setEditModalVisible(true); }; + const handleInfoClick = (model: any) => { + setSelectedModel(model); + setInfoModalVisible(true); + }; + const handleEditCancel = () => { setEditModalVisible(false); setSelectedModel(null); }; + const handleInfoCancel = () => { + setInfoModalVisible(false); + setSelectedModel(null); + }; + const handleEditSubmit = async (formValues: Record) => { // Call API to update team with teamId and values @@ -1073,15 +1096,6 @@ const ModelDashboard: React.FC = ({ API Base )} - - Extra litellm Params - = ({ /1M Tokens ($)

+ - Max Tokens + Created At + + + Created By = ({ > Status + + + @@ -1140,12 +1167,14 @@ const ModelDashboard: React.FC = ({ - {model.model_name} +

+ {model.model_name} +

= ({ wordBreak: "break-word", }} > +

{model.provider} +

{userRole === "Admin" && ( - {model.api_base} - - )} - - - - Litellm params - - -
-                                  {JSON.stringify(
-                                    model.cleanedLitellmParams,
-                                    null,
-                                    2
-                                  )}
-                                
-
-
+ +
+                              {model && model.api_base ? model.api_base.slice(0, 20) : null}
+                            
+
+ + )} = ({ model.litellm_params.output_cost_per_token || null} - -

- Max Tokens: {model.max_tokens}

- Max Input Tokens: {model.max_input_tokens} + +

+ {formatCreatedAt(model.model_info.created_at)} +

+ +
+ +

+ {model.model_info.created_by}

= ({ size="xs" className="text-white" > -

DB Model

+

DB Model

) : ( = ({ size="xs" className="text-black" > -

Config Model

+

Config Model

)}
+ + + handleInfoClick(model)} + /> + + handleEditClick(model)} /> + + + + + + +
))} @@ -1277,6 +1314,20 @@ const ModelDashboard: React.FC = ({ model={selectedModel} onSubmit={handleEditSubmit} /> + + + Model Info + + {selectedModel && JSON.stringify(selectedModel, null, 2)} + + + Add new model