From 82cec3885ec7b8667fd7cf0dfc7e38acb09a67b7 Mon Sep 17 00:00:00 2001 From: tanjiro <56165694+NANDINI-star@users.noreply.github.com> Date: Sun, 31 Aug 2025 14:33:15 +0900 Subject: [PATCH] model filters ui matches the users page --- .../components/templates/model_dashboard.tsx | 282 +++++++++++------- 1 file changed, 170 insertions(+), 112 deletions(-) diff --git a/ui/litellm-dashboard/src/components/templates/model_dashboard.tsx b/ui/litellm-dashboard/src/components/templates/model_dashboard.tsx index 85f18ee89e..4dd66d0bf5 100644 --- a/ui/litellm-dashboard/src/components/templates/model_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/templates/model_dashboard.tsx @@ -191,6 +191,9 @@ const ModelDashboard: React.FC = ({ const [currentTeam, setCurrentTeam] = useState("personal") // 'personal' or team_id const [modelViewMode, setModelViewMode] = useState<"current_team" | "all">("current_team") + // Add state for showing/hiding filters + const [showFilters, setShowFilters] = useState(false) + const [showColumnDropdown, setShowColumnDropdown] = useState(false) const [isDropdownOpen, setIsDropdownOpen] = useState(false) @@ -206,6 +209,14 @@ const ModelDashboard: React.FC = ({ setSelectedTabIndex(1) } + const resetFilters = () => { + setModelNameSearch("") + setSelectedModelGroup("all") + setSelectedModelAccessGroupFilter(null) + setCurrentTeam("personal") + setModelViewMode("current_team") + } + const setProviderModelsFn = (provider: Providers) => { const _providerModels = getProviderModels(provider, modelMap) setProviderModels(_providerModels) @@ -1006,119 +1017,166 @@ const ModelDashboard: React.FC = ({
-
-
- {/* Current Team Selector - Prominent */} -
-
-
- Current Team: - setCurrentTeam(value)} + > + +
+
+ Personal +
+
+ {teams + ?.filter((team) => team.team_id) + .map((team) => ( +
-
- Personal +
+ + {team.team_alias + ? `${team.team_alias.slice(0, 30)}...` + : `Team ${team.team_id.slice(0, 30)}...`} +
- {teams - ?.filter((team) => team.team_id) - .map((team) => ( - -
-
- - {team.team_alias - ? `${team.team_alias.slice(0, 30)}...` - : `Team ${team.team_id.slice(0, 30)}...`} - -
-
- ))} - -
- {modelViewMode === "current_team" && ( -
- -
- {currentTeam === "personal" ? ( - - To access these models: Create a Virtual Key without selecting a team on the{" "} - - Virtual Keys page - - - ) : ( - - To access these models: Create a Virtual Key and select Team as " - {currentTeam}" on the{" "} - - Virtual Keys page - - - )} -
-
- )} -
- - {/* Model View Mode Toggle - Also prominent */} -
- View: - -
+ ))} +
- {/* Other Filters */} -
-
- {/* Model Name Search */} -
- Search Public Model Name: - -
+
+ View: + +
+
+ + {modelViewMode === "current_team" && ( +
+ +
+ {currentTeam === "personal" ? ( + + To access these models: Create a Virtual Key without selecting a team on the{" "} + + Virtual Keys page + + + ) : ( + + To access these models: Create a Virtual Key and select Team as " + {currentTeam}" on the{" "} + + Virtual Keys page + + + )} +
+
+ )} +
+ {/* Search and Filter Controls */} +
+
+ {/* Search and Filter Controls */} +
+ {/* Model Name Search */} +
+ setModelNameSearch(e.target.value)} + /> + + + +
+ + {/* Filter Button */} + + + {/* Reset Filters Button */} + +
+ + {/* Additional Filters */} + {showFilters && ( +
{/* Model Name Filter */} -
- Filter by Public Model Name: +
-
- Filter by Model Access Group: + {/* Model Access Group Filter */} +
-
+ )} {/* Results Count */}
- + Showing{" "} {modelData && modelData.data.length > 0 ? modelData.data.filter((model: any) => { @@ -1164,7 +1221,8 @@ const ModelDashboard: React.FC = ({ const modelNameMatch = selectedModelGroup === "all" || model.model_name === selectedModelGroup || - !selectedModelGroup + !selectedModelGroup || + (selectedModelGroup === "wildcard" && model.model_name?.includes("*")) const accessGroupMatch = selectedModelAccessGroupFilter === "all" || model.model_info["access_groups"]?.includes(selectedModelAccessGroupFilter) || @@ -1183,7 +1241,7 @@ const ModelDashboard: React.FC = ({ }).length : 0}{" "} results - +