This commit is contained in:
Ege 2026-11-01 10:31:12 +03:00 • committed by GitHub
commit 8f0c385958
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 38 additions and 15 deletions

View file

@ -7465,21 +7465,26 @@ class StandardLoggingPayloadSetup:
return None
user_agent_tags: list[str] | None = None
headers: Final = proxy_server_request.get("headers", {})
if headers is not None and isinstance(headers, dict):
request_headers: Final = cast( # cast-ok: request headers are untyped framework data
dict[str, str | None], headers
)
if "user-agent" in request_headers:
user_agent: Final = request_headers["user-agent"]
if user_agent is not None:
if user_agent_tags is None:
user_agent_tags = []
user_agent_part: str | None = None
if "/" in user_agent:
user_agent_part = user_agent.split("/")[0]
if user_agent_part is not None:
user_agent_tags.append("User-Agent: " + user_agent_part)
user_agent_tags.append("User-Agent: " + user_agent)
if not isinstance(headers, dict):
return None
request_headers: Final = cast( # cast-ok: request headers are untyped framework data
dict[str, str | None], headers
)
# Header names are case-insensitive: a client that sends "User-Agent"
# or "USER-AGENT" must still be tagged (#40979).
user_agent: Final = next(
(v for k, v in request_headers.items() if k.lower() == "user-agent"),
None,
)
if user_agent is not None:
if user_agent_tags is None:
user_agent_tags = []
user_agent_part: str | None = None
if "/" in user_agent:
user_agent_part = user_agent.split("/")[0]
if user_agent_part is not None:
user_agent_tags.append("User-Agent: " + user_agent_part)
user_agent_tags.append("User-Agent: " + user_agent)
return user_agent_tags
@staticmethod

View file

@ -3646,6 +3646,24 @@ def test_get_user_agent_tags():
assert "User-Agent: litellm" in tags
assert "User-Agent: litellm/0.1.0" in tags
# Header names are case-insensitive ("User-Agent" vs "user-agent").
tags_capitalized = StandardLoggingPayloadSetup._get_user_agent_tags(
proxy_server_request={
"headers": {
"User-Agent": "curl/7.68.0",
}
}
)
assert tags_capitalized is not None
assert "User-Agent: curl" in tags_capitalized
assert "User-Agent: curl/7.68.0" in tags_capitalized
# Non-dict headers must not raise; the function early-returns.
assert StandardLoggingPayloadSetup._get_user_agent_tags(
proxy_server_request={"headers": None}
) is None
def test_get_request_tags():
from litellm.litellm_core_utils.litellm_logging import StandardLoggingPayloadSetup