fix(team): regenerate schema types and clear lint gates for bulk member update

This commit is contained in:
mubashir1osmani 2026-07-11 16:16:14 -07:00
parent db9decaed7
commit 8ce1be5eae
6 changed files with 5701 additions and 87 deletions

View file

@ -3706,12 +3706,12 @@ class TeamMemberUpdateResponse(MemberUpdateResponse):
class TeamMemberBulkUpdateFields(LiteLLMPydanticObjectBase):
max_budget_in_team: Optional[float] = None
role: Optional[Literal["admin", "user"]] = None
tpm_limit: Optional[int] = None
rpm_limit: Optional[int] = None
budget_duration: Optional[str] = None
allowed_models: Optional[List[str]] = None
max_budget_in_team: float | None = None
role: Literal["admin", "user"] | None = None
tpm_limit: int | None = None
rpm_limit: int | None = None
budget_duration: str | None = None
allowed_models: list[str] | None = None
@model_validator(mode="after")
def require_at_least_one_field(self):
@ -3722,7 +3722,7 @@ class TeamMemberBulkUpdateFields(LiteLLMPydanticObjectBase):
class BulkTeamMemberUpdateRequest(LiteLLMPydanticObjectBase):
team_id: str
user_ids: Optional[List[str]] = None
user_ids: list[str] | None = None
all_members_in_team: bool = False
update_fields: TeamMemberBulkUpdateFields
@ -3743,8 +3743,8 @@ class FailedTeamMemberUpdate(MemberUpdateResponse):
class BulkTeamMemberUpdateResponse(LiteLLMPydanticObjectBase):
team_id: str
total_requested: int
successful_updates: List[TeamMemberUpdateResponse]
failed_updates: List[FailedTeamMemberUpdate]
successful_updates: list[TeamMemberUpdateResponse]
failed_updates: list[FailedTeamMemberUpdate]
class TeamModelAddRequest(BaseModel):

View file

@ -3060,8 +3060,8 @@ async def bulk_update_team_members(
)
update_fields = data.update_fields.model_dump(exclude_unset=True)
successful_updates: List[TeamMemberUpdateResponse] = []
failed_updates: List[FailedTeamMemberUpdate] = []
successful_updates: list[TeamMemberUpdateResponse] = []
failed_updates: list[FailedTeamMemberUpdate] = []
for user_id in user_ids:
try:
response = await team_member_update(

View file

@ -2732,32 +2732,6 @@ export interface Member {
allowed_models?: string[] | null;
}
export interface TeamMemberBulkUpdateFields {
role?: "admin" | "user" | null;
max_budget_in_team?: number | null;
tpm_limit?: number | null;
rpm_limit?: number | null;
budget_duration?: string | null;
allowed_models?: string[] | null;
}
export const teamMemberBulkUpdateCall = async (
accessToken: string,
teamId: string,
userIds: string[],
allMembersInTeam: boolean,
updateFields: TeamMemberBulkUpdateFields,
) => {
return apiClient.post(`/team/member/bulk_update`, {
accessToken,
body: {
team_id: teamId,
...(allMembersInTeam ? { all_members_in_team: true } : { user_ids: userIds }),
update_fields: updateFields,
},
});
};
export const teamMemberAddCall = async (accessToken: string, teamId: string, formValues: Member) => {
try {
const url = proxyBaseUrl ? `${proxyBaseUrl}/team/member_add` : `/team/member_add`;

View file

@ -1,6 +1,6 @@
import { useUISettings } from "@/app/(dashboard)/hooks/uiSettings/useUISettings";
import useAuthorized from "@/app/(dashboard)/hooks/useAuthorized";
import { Member, TeamMemberBulkUpdateFields, teamMemberBulkUpdateCall } from "@/components/networking";
import { Member } from "@/components/networking";
import BudgetDurationDropdown from "@/components/common_components/budget_duration_dropdown";
import NotificationsManager from "@/components/molecules/notifications_manager";
import NumericalInput from "@/components/shared/numerical_input";
@ -12,6 +12,7 @@ import { Button, Checkbox, Form, Modal, Select, Space, Tooltip, Typography } fro
import type { ColumnsType } from "antd/es/table";
import { useState } from "react";
import MemberTable from "@/components/common_components/MemberTable";
import { TeamMemberBulkUpdateFields, teamMemberBulkUpdateCall } from "./teamMemberBulkUpdate";
import { TeamData } from "./TeamInfo";
interface TeamMemberTabProps {
@ -229,7 +230,7 @@ export default function TeamMemberTab({
setIsBulkUpdating(true);
try {
const response = await teamMemberBulkUpdateCall(accessToken, teamData.team_id, userIds, false, updateFields);
const response = await teamMemberBulkUpdateCall(accessToken, teamData.team_id, userIds, updateFields);
await onMembersUpdated?.();
setIsBulkUpdateVisible(false);
setSelectedMembers([]);

View file

@ -0,0 +1,31 @@
import { getGlobalLitellmHeaderName, getProxyBaseUrl } from "@/components/networking";
import { createApiClient } from "@/lib/http/client";
export interface TeamMemberBulkUpdateFields {
role?: "admin" | "user" | null;
max_budget_in_team?: number | null;
tpm_limit?: number | null;
rpm_limit?: number | null;
budget_duration?: string | null;
allowed_models?: string[] | null;
}
const apiClient = createApiClient({
getBaseUrl: getProxyBaseUrl,
getAuthHeaderName: getGlobalLitellmHeaderName,
});
export const teamMemberBulkUpdateCall = async (
accessToken: string,
teamId: string,
userIds: string[],
updateFields: TeamMemberBulkUpdateFields,
) =>
apiClient.post(`/team/member/bulk_update`, {
accessToken,
body: {
team_id: teamId,
user_ids: userIds,
update_fields: updateFields,
},
});

File diff suppressed because it is too large Load diff