From fada9c79beec85110ef54bf634295ba673ceddb3 Mon Sep 17 00:00:00 2001 From: raz-alon Date: Thu, 5 Jun 2025 04:38:02 +0300 Subject: [PATCH] Add User ID validation to ensure it is not an email or phone number (#10102) --- litellm/llms/anthropic/chat/transformation.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/litellm/llms/anthropic/chat/transformation.py b/litellm/llms/anthropic/chat/transformation.py index ad8c6b275f..1c766536b7 100644 --- a/litellm/llms/anthropic/chat/transformation.py +++ b/litellm/llms/anthropic/chat/transformation.py @@ -1,5 +1,6 @@ import json import time +import re from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union, cast import httpx @@ -641,6 +642,7 @@ class AnthropicConfig(AnthropicModelInfo, BaseConfig): _litellm_metadata and isinstance(_litellm_metadata, dict) and "user_id" in _litellm_metadata + and not _valid_user_id(_litellm_metadata.get("user_id", None)) ): optional_params["metadata"] = {"user_id": _litellm_metadata["user_id"]} @@ -948,3 +950,19 @@ class AnthropicConfig(AnthropicModelInfo, BaseConfig): message=error_message, headers=cast(httpx.Headers, headers), ) + + +def _valid_user_id(user_id: str) -> bool: + """ + Validate that user_id is not an email or phone number. + Returns: bool: True if valid (not email or phone), False otherwise + """ + email_pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" + phone_pattern = r"^\+?[\d\s\(\)-]{7,}$" + + if re.match(email_pattern, user_id): + return False + if re.match(phone_pattern, user_id): + return False + + return True