diff --git a/ui/litellm-dashboard/.eslintrc.json b/ui/litellm-dashboard/.eslintrc.json index 4f63cabe534..2b759be26e6 100644 --- a/ui/litellm-dashboard/.eslintrc.json +++ b/ui/litellm-dashboard/.eslintrc.json @@ -41,6 +41,7 @@ "src/components/mcp_server_management/MCPServerSelector.tsx", "src/components/mcp_tools/MCPNetworkSettings.tsx", "src/components/mcp_tools/ByokCredentialModal.tsx", + "src/components/mcp_tools/mcp_server_cost_display.tsx", "src/components/shared/usage_date_picker.tsx", "src/components/shared/advanced_date_picker.tsx", "src/components/activity_metrics.tsx", diff --git a/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx b/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx index f9b6533ac60..4e7bfd195b9 100644 --- a/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx +++ b/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx @@ -1,4 +1,9 @@ -import { Tab, TabGroup, TabList, TabPanel, TabPanels } from "@tremor/react"; +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@/components/ui/tabs"; import type { FormInstance } from "antd"; import { Form } from "antd"; import type { UploadProps } from "antd/es/upload"; @@ -11,7 +16,8 @@ import AddModelForm from "./AddModelForm"; import { handleAddAutoRouterSubmit } from "./handle_add_auto_router_submit"; interface AddModelTabProps { - form: FormInstance; // For the Add Model tab + form: FormInstance; + // eslint-disable-next-line @typescript-eslint/no-explicit-any handleOk: (values?: any) => Promise; selectedProvider: Providers; setSelectedProvider: (provider: Providers) => void; @@ -43,14 +49,18 @@ const AddModelTab: React.FC = ({ accessToken, userRole, }) => { - // Create separate form instance for auto router const [autoRouterForm] = Form.useForm(); const handleAutoRouterOk = () => { autoRouterForm .validateFields() .then((values) => { - handleAddAutoRouterSubmit(values, accessToken, autoRouterForm, handleOk); + handleAddAutoRouterSubmit( + values, + accessToken, + autoRouterForm, + handleOk, + ); }) .catch((error) => { console.error("Validation failed:", error); @@ -58,40 +68,36 @@ const AddModelTab: React.FC = ({ }; return ( - <> - - - Add Model - Add Auto Router - - - - - - - - - - - + + + Add Model + Add Auto Router + + + + + + + + ); }; diff --git a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_cost_display.tsx b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_cost_display.tsx index e41a06b879e..86425e47911 100644 --- a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_cost_display.tsx +++ b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_cost_display.tsx @@ -1,26 +1,30 @@ import React from "react"; -import { Text } from "@tremor/react"; import { MCPServerCostInfo } from "./types"; interface MCPServerCostDisplayProps { costConfig?: MCPServerCostInfo | null; } -const MCPServerCostDisplay: React.FC = ({ costConfig }) => { +const MCPServerCostDisplay: React.FC = ({ + costConfig, +}) => { const hasDefaultCost = - costConfig?.default_cost_per_query !== undefined && costConfig?.default_cost_per_query !== null; + costConfig?.default_cost_per_query !== undefined && + costConfig?.default_cost_per_query !== null; const hasToolCosts = - costConfig?.tool_name_to_cost_per_query && Object.keys(costConfig.tool_name_to_cost_per_query).length > 0; + costConfig?.tool_name_to_cost_per_query && + Object.keys(costConfig.tool_name_to_cost_per_query).length > 0; const hasCostConfig = hasDefaultCost || hasToolCosts; if (!hasCostConfig) { return ( -
+
-
- - No cost configuration set for this server. Tool calls will be charged at $0.00 per tool call. - +
+

+ No cost configuration set for this server. Tool calls will be + charged at $0.00 per tool call. +

@@ -28,28 +32,35 @@ const MCPServerCostDisplay: React.FC = ({ costConfig } return ( -
+
{hasDefaultCost && costConfig?.default_cost_per_query !== undefined && costConfig?.default_cost_per_query !== null && (
- Default Cost per Query -
${costConfig.default_cost_per_query.toFixed(4)}
+

Default Cost per Query

+
+ ${costConfig.default_cost_per_query.toFixed(4)} +
)} {hasToolCosts && costConfig?.tool_name_to_cost_per_query && (
- Tool-Specific Costs +

Tool-Specific Costs

{Object.entries(costConfig.tool_name_to_cost_per_query).map( ([toolName, cost]) => cost !== null && cost !== undefined && ( -
- {toolName} - ${cost.toFixed(4)} per query +
+ {toolName} + + ${cost.toFixed(4)} per query +
), )} @@ -57,20 +68,24 @@ const MCPServerCostDisplay: React.FC = ({ costConfig
)} -
- Cost Summary: +
+

+ Cost Summary: +

{hasDefaultCost && costConfig?.default_cost_per_query !== undefined && costConfig?.default_cost_per_query !== null && ( - - • Default cost: ${costConfig.default_cost_per_query.toFixed(4)} per query - +

+ • Default cost: $ + {costConfig.default_cost_per_query.toFixed(4)} per query +

)} {hasToolCosts && costConfig?.tool_name_to_cost_per_query && ( - - • {Object.keys(costConfig.tool_name_to_cost_per_query).length} tool(s) with custom pricing - +

+ • {Object.keys(costConfig.tool_name_to_cost_per_query).length}{" "} + tool(s) with custom pricing +

)}