diff --git a/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.test.tsx b/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.test.tsx index e253bc4c0ef..a4d20372cd0 100644 --- a/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.test.tsx +++ b/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.test.tsx @@ -423,6 +423,36 @@ describe("ModelSelect", () => { }, shouldShow: false, }, + { + name: "when a team has no organization and the caller is not a proxy admin", + context: "team" as const, + options: { includeSpecialOptions: true }, + props: { teamID: "team-1" }, + setup: () => { + mockUseTeam.mockReturnValue({ + data: { team_id: "team-1", team_alias: "Test Team", models: ["gpt-4"] }, + isLoading: false, + } as any); + }, + shouldShow: true, + }, + { + name: "when a team belongs to an organization scoped to specific models", + context: "team" as const, + options: { includeSpecialOptions: true }, + props: { teamID: "team-1", organizationID: "org-1" }, + setup: () => { + mockUseTeam.mockReturnValue({ + data: { team_id: "team-1", team_alias: "Test Team", models: ["gpt-4"] }, + isLoading: false, + } as any); + mockUseOrganization.mockReturnValue({ + data: createMockOrganization(["gpt-4"]), + isLoading: false, + } as any); + }, + shouldShow: false, + }, ]; for (const testCase of testCases) { diff --git a/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.tsx b/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.tsx index 0965683c241..b4932a9f847 100644 --- a/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.tsx +++ b/ui/litellm-dashboard/src/components/ModelSelect/ModelSelect.tsx @@ -106,8 +106,10 @@ export const ModelSelect = (props: ModelSelectProps) => { const organizationHasAllProxyModels = organization?.models.includes(MODEL_SELECT_ALL_PROXY_MODELS_SPECIAL_VALUE.value) || organization?.models.length === 0; + const teamIsUnscopedByOrganization = context === "team" && !organizationID; + const scopeAllowsAllProxyModels = organizationHasAllProxyModels || teamIsUnscopedByOrganization; const shouldShowAllProxyModels = - showAllProxyModelsOverride || (organizationHasAllProxyModels && includeSpecialOptions) || context === "global"; + showAllProxyModelsOverride || (scopeAllowsAllProxyModels && includeSpecialOptions) || context === "global"; if (isLoading) { return ; diff --git a/ui/litellm-dashboard/src/components/Teams.tsx b/ui/litellm-dashboard/src/components/Teams.tsx index fc89751db6a..87fbd4b1e5d 100644 --- a/ui/litellm-dashboard/src/components/Teams.tsx +++ b/ui/litellm-dashboard/src/components/Teams.tsx @@ -715,7 +715,6 @@ const Teams: React.FC = ({ accessToken, userID, userRole, premiumUser organizationID={form.getFieldValue("organization_id")} options={{ includeSpecialOptions: true, - showAllProxyModelsOverride: !form.getFieldValue("organization_id"), }} context="team" dataTestId="create-team-models-select" diff --git a/ui/litellm-dashboard/src/components/team/TeamInfo.tsx b/ui/litellm-dashboard/src/components/team/TeamInfo.tsx index bbe5dc05a88..88c2338351c 100644 --- a/ui/litellm-dashboard/src/components/team/TeamInfo.tsx +++ b/ui/litellm-dashboard/src/components/team/TeamInfo.tsx @@ -18,7 +18,6 @@ import { useGuardrails, GuardrailListItem } from "@/app/(dashboard)/hooks/guardr import { formatNumberWithCommas } from "@/utils/dataUtils"; import { mapEmptyStringToNull } from "@/utils/keyUpdateUtils"; import type { ObjectPermission } from "@/components/object_permission_types"; -import { isProxyAdminRole } from "@/utils/roles"; import { EditOutlined, GlobalOutlined, @@ -1035,8 +1034,6 @@ const TeamInfoView: React.FC = ({ options={{ includeSpecialOptions: true, includeUserModels: !teamData?.team_info?.organization_id, - showAllProxyModelsOverride: - isProxyAdminRole(userRole) && !teamData?.team_info?.organization_id, }} context="team" dataTestId="models-select"