From 2292b6530c772b33d66b464272c0d256c870c190 Mon Sep 17 00:00:00 2001 From: Yash Rathod <52967673+yash30389@users.noreply.github.com> Date: Wed, 28 Oct 2026 13:47:01 +0530 Subject: [PATCH 1/3] Refactor tag management for premium users Refactor tag handling for key management to ensure only premium users can add tags. Adjust logic to manage tags in metadata appropriately. --- .../key_management_endpoints.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/litellm/proxy/management_endpoints/key_management_endpoints.py b/litellm/proxy/management_endpoints/key_management_endpoints.py index f7b72b263d4..25db059e4b7 100644 --- a/litellm/proxy/management_endpoints/key_management_endpoints.py +++ b/litellm/proxy/management_endpoints/key_management_endpoints.py @@ -1667,16 +1667,23 @@ async def _common_key_generation_helper( if "tags" in data_json: from litellm.proxy.proxy_server import premium_user - if premium_user is not True and data_json["tags"] is not None: - raise ValueError(f"Only premium users can add tags to keys. {CommonProxyErrors.not_premium_user.value}") + tags = data_json.get("tags") + if premium_user is not True and isinstance(tags, list) and len(tags) > 0: + raise ValueError( + f"Only premium users can add tags to keys. {CommonProxyErrors.not_premium_user.value}" + ) _metadata: Final = data_json.get("metadata") - if not _metadata: - data_json["metadata"] = {"tags": data_json["tags"]} + if tags is None: + if isinstance(_metadata, dict): + _metadata.pop("tags", None) + data_json.pop("tags", None) else: - data_json["metadata"]["tags"] = data_json["tags"] - - data_json.pop("tags") + if not _metadata: + data_json["metadata"] = {"tags": tags} + else: + data_json["metadata"]["tags"] = tags + data_json.pop("tags") # Validate MCP servers in object_permission are within team scope _is_proxy_admin_caller: Final = user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN.value From ae13dc6f6bba218ec13ebdf3fd08b8ec3b11b564 Mon Sep 17 00:00:00 2001 From: Yash Rathod <52967673+yash30389@users.noreply.github.com> Date: Wed, 28 Oct 2026 13:58:59 +0530 Subject: [PATCH 2/3] Refactor tag validation for premium users --- .../proxy/management_endpoints/key_management_endpoints.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/management_endpoints/key_management_endpoints.py b/litellm/proxy/management_endpoints/key_management_endpoints.py index 25db059e4b7..1dad3717cc4 100644 --- a/litellm/proxy/management_endpoints/key_management_endpoints.py +++ b/litellm/proxy/management_endpoints/key_management_endpoints.py @@ -1666,12 +1666,10 @@ async def _common_key_generation_helper( # Set tags on the new key if "tags" in data_json: from litellm.proxy.proxy_server import premium_user - + tags = data_json.get("tags") if premium_user is not True and isinstance(tags, list) and len(tags) > 0: - raise ValueError( - f"Only premium users can add tags to keys. {CommonProxyErrors.not_premium_user.value}" - ) + raise ValueError(f"Only premium users can add tags to keys. {CommonProxyErrors.not_premium_user.value}") _metadata: Final = data_json.get("metadata") if tags is None: From f752e2aa968d5a856d55dbc26c6c4187287febc7 Mon Sep 17 00:00:00 2001 From: Yash Rathod <52967673+yash30389@users.noreply.github.com> Date: Wed, 28 Oct 2026 14:02:39 +0530 Subject: [PATCH 3/3] Refactor tag handling for premium users --- .../management_endpoints/key_management_endpoints.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/management_endpoints/key_management_endpoints.py b/litellm/proxy/management_endpoints/key_management_endpoints.py index 1dad3717cc4..a4036fd05b6 100644 --- a/litellm/proxy/management_endpoints/key_management_endpoints.py +++ b/litellm/proxy/management_endpoints/key_management_endpoints.py @@ -1666,10 +1666,12 @@ async def _common_key_generation_helper( # Set tags on the new key if "tags" in data_json: from litellm.proxy.proxy_server import premium_user - + tags = data_json.get("tags") if premium_user is not True and isinstance(tags, list) and len(tags) > 0: - raise ValueError(f"Only premium users can add tags to keys. {CommonProxyErrors.not_premium_user.value}") + raise ValueError( + f"Only premium users can add tags to keys. {CommonProxyErrors.not_premium_user.value}" + ) _metadata: Final = data_json.get("metadata") if tags is None: @@ -1677,11 +1679,11 @@ async def _common_key_generation_helper( _metadata.pop("tags", None) data_json.pop("tags", None) else: - if not _metadata: + if not isinstance(_metadata, dict): data_json["metadata"] = {"tags": tags} else: data_json["metadata"]["tags"] = tags - data_json.pop("tags") + data_json.pop("tags", None) # Validate MCP servers in object_permission are within team scope _is_proxy_admin_caller: Final = user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN.value