fix(proxy/logging): case-insensitive User-Agent header lookup in _get_user_agent_tags

Ensures User-Agent request tags are extracted regardless of header key casing.

Closes #40979
This commit is contained in:
Dushyant Acharya 2026-09-13 12:30:19 +05:30
parent c7c895db45
commit 60341e870b
2 changed files with 28 additions and 11 deletions

View file

@ -7113,17 +7113,18 @@ class StandardLoggingPayloadSetup:
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)
user_agent: Final[str | None] = next(
(v for k, v in request_headers.items() if k.lower() == "user-agent" and isinstance(v, str)),
None,
)
if user_agent is not 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

@ -3412,6 +3412,22 @@ def test_get_user_agent_tags():
assert "User-Agent: litellm/0.1.0" in tags
def test_get_user_agent_tags_case_insensitive():
from litellm.litellm_core_utils.litellm_logging import StandardLoggingPayloadSetup
tags = StandardLoggingPayloadSetup._get_user_agent_tags(
proxy_server_request={
"headers": {
"User-Agent": "curl/7.68.0",
}
}
)
assert tags is not None
assert "User-Agent: curl" in tags
assert "User-Agent: curl/7.68.0" in tags
def test_get_request_tags():
from litellm.litellm_core_utils.litellm_logging import StandardLoggingPayloadSetup