diff --git a/litellm/proxy/management_endpoints/team_endpoints.py b/litellm/proxy/management_endpoints/team_endpoints.py index a1e96610a56..3d15a855ccf 100644 --- a/litellm/proxy/management_endpoints/team_endpoints.py +++ b/litellm/proxy/management_endpoints/team_endpoints.py @@ -964,7 +964,6 @@ def team_member_add_duplication_check( invalid_team_members = [] def _check_member_duplication(member: Member): - # Check by user_id if provided if member.user_id is not None: for existing_member in existing_team_row.members_with_roles: if existing_member.user_id == member.user_id: @@ -976,18 +975,26 @@ def team_member_add_duplication_check( if existing_member.user_email == member.user_email: invalid_team_members.append(member) + # First, populate the invalid_team_members list by checking for duplicates + if isinstance(data.member, Member): + _check_member_duplication(data.member) + elif isinstance(data.member, List): + for m in data.member: + _check_member_duplication(m) + + # Then check the populated list and raise exceptions if needed if isinstance(data.member, list) and len(invalid_team_members) == len(data.member): raise ProxyException( message=f"All users are already in team. Existing members={existing_team_row.members_with_roles}", type=ProxyErrorTypes.team_member_already_in_team, - param="user_email", + param="member", code="400", ) elif isinstance(data.member, Member) and len(invalid_team_members) == 1: raise ProxyException( - message=f"User with user_email={data.member.user_email} already in team. Existing members={existing_team_row.members_with_roles}", + message=f"User already in team. Member: user_id={data.member.user_id}, user_email={data.member.user_email}. Existing members={existing_team_row.members_with_roles}", type=ProxyErrorTypes.team_member_already_in_team, - param="user_email", + param="member", code="400", ) elif len(invalid_team_members) > 0: @@ -995,12 +1002,6 @@ def team_member_add_duplication_check( f"Some users are already in team. Existing members={existing_team_row.members_with_roles}. Duplicate members={invalid_team_members}", ) - if isinstance(data.member, Member): - _check_member_duplication(data.member) - elif isinstance(data.member, List): - for m in data.member: - _check_member_duplication(m) - async def _validate_team_member_add_permissions( user_api_key_dict: UserAPIKeyAuth, diff --git a/tests/test_litellm/proxy/management_endpoints/test_team_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_team_endpoints.py index 820d8bd76de..a8c82b4f9b0 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_team_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_team_endpoints.py @@ -561,7 +561,7 @@ def test_team_member_add_duplication_check_raises_proxy_exception(): # Verify the exception details assert exc_info.value.type == ProxyErrorTypes.team_member_already_in_team - assert exc_info.value.param == "user_id" + assert exc_info.value.param == "member" assert exc_info.value.code == "400" assert "existing-user-id" in str(exc_info.value.message) assert "already in team" in str(exc_info.value.message)