From 8e83e91275d481df8d9a5e869d1c7675b1abf123 Mon Sep 17 00:00:00 2001 From: ryan Date: Mon, 14 Sep 2026 22:40:57 +0000 Subject: [PATCH] fix(proxy): keep bulk user row errors free of the tuple length message Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../proxy/management_endpoints/internal_user_endpoints.py | 4 ++-- .../management_endpoints/management_v1/test_users.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/litellm/types/proxy/management_endpoints/internal_user_endpoints.py b/litellm/types/proxy/management_endpoints/internal_user_endpoints.py index f6a2c173ad5..3b4a2a417f2 100644 --- a/litellm/types/proxy/management_endpoints/internal_user_endpoints.py +++ b/litellm/types/proxy/management_endpoints/internal_user_endpoints.py @@ -1,4 +1,4 @@ -from collections.abc import Mapping +from collections.abc import Mapping, Sequence from typing import Any, Final, Literal from pydantic import BaseModel, ConfigDict, Field, field_validator @@ -107,7 +107,7 @@ class BulkNewUserItem(NewUserRequest): class BulkNewUserRequest(BaseModel): model_config = ConfigDict(extra="forbid") - users: tuple[BulkNewUserItem, ...] = Field(min_length=1, max_length=MAX_BULK_NEW_USERS) + users: Sequence[BulkNewUserItem] = Field(min_length=1, max_length=MAX_BULK_NEW_USERS) class UserCreateResult(BaseModel): diff --git a/tests/test_litellm/proxy/management_endpoints/management_v1/test_users.py b/tests/test_litellm/proxy/management_endpoints/management_v1/test_users.py index b61e639e453..edd1d315093 100644 --- a/tests/test_litellm/proxy/management_endpoints/management_v1/test_users.py +++ b/tests/test_litellm/proxy/management_endpoints/management_v1/test_users.py @@ -79,16 +79,16 @@ def test_returns_one_result_per_row_in_order_inside_the_data_meta_envelope(prism def test_an_unknown_field_anywhere_in_the_body_is_a_422_problem(prisma, as_proxy_admin): - for body in ( - {"users": [{"user_email": "a@example.com", "user_emial": "typo"}]}, - {"users": [{"user_email": "a@example.com"}], "dry_run": True}, + for body, field in ( + ({"users": [{"user_email": "a@example.com", "user_emial": "typo"}]}, "users.0.user_emial"), + ({"users": [{"user_email": "a@example.com"}], "dry_run": True}, "dry_run"), ): response = _post(body) assert response.status_code == 422, body assert response.headers["content-type"] == "application/problem+json" assert response.json()["type"] == "urn:litellm:error:invalid-request-body" - assert "Extra inputs are not permitted" in response.json()["detail"] + assert response.json()["detail"] == f"{field}: Extra inputs are not permitted" assert prisma.db.litellm_usertable.rows == {}