Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion python/packages/core/agent_framework/_telemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,13 @@ def prepend_agent_framework_to_user_agent(headers: dict[str, Any] | None = None)
user_agent = get_user_agent()
if not headers:
return {USER_AGENT_KEY: user_agent}
headers[USER_AGENT_KEY] = f"{user_agent} {headers[USER_AGENT_KEY]}" if USER_AGENT_KEY in headers else user_agent
existing_user_agent_key = next(
(header_name for header_name in headers if header_name.lower() == USER_AGENT_KEY.lower()),
None,
)
if existing_user_agent_key is None:
headers[USER_AGENT_KEY] = user_agent
else:
headers[existing_user_agent_key] = f"{user_agent} {headers[existing_user_agent_key]}"

return headers
11 changes: 11 additions & 0 deletions python/packages/core/tests/core/test_telemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,17 @@ def test_prepend_to_existing_user_agent():
assert "existing-agent/1.0" in result["User-Agent"]


def test_prepend_to_existing_lowercase_user_agent():
"""Test prepending to a case-insensitive User-Agent header."""
headers = {"user-agent": "existing-agent/1.0"}
result = prepend_agent_framework_to_user_agent(headers)

assert result is headers
assert [key for key in result if key.lower() == USER_AGENT_KEY.lower()] == ["user-agent"]
assert result["user-agent"].startswith("agent-framework-python/")
assert "existing-agent/1.0" in result["user-agent"]


def test_prepend_to_empty_headers():
"""Test prepending to headers without User-Agent."""
headers = {"Content-Type": "application/json"}
Expand Down
Loading