Merge pull request #24434 from BerriAI/krrishdholakia/prometheus-spend-metadata

feat(prometheus): include spend_logs_metadata in custom labels
This commit is contained in:
Krish Dholakia 2026-03-23 16:52:59 -07:00 committed by GitHub
commit 8a3aa4d31c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 114 additions and 0 deletions

View File

@ -931,10 +931,14 @@ class PrometheusLogger(CustomLogger):
user_api_key_auth_metadata: Optional[dict] = standard_logging_payload[
"metadata"
].get("user_api_key_auth_metadata")
spend_logs_metadata: Optional[dict] = standard_logging_payload["metadata"].get(
"spend_logs_metadata"
)
combined_metadata: Dict[str, Any] = {
**(_requester_metadata if _requester_metadata else {}),
**(user_api_key_auth_metadata if user_api_key_auth_metadata else {}),
**(spend_logs_metadata if spend_logs_metadata else {}),
}
if standard_logging_payload is not None and isinstance(
standard_logging_payload, dict

View File

@ -0,0 +1,110 @@
"""
Unit tests for spend_logs_metadata inclusion in Prometheus custom labels.
Verifies that metadata from x-litellm-spend-logs-metadata header is available
in Prometheus custom labels via combined_metadata.
"""
from litellm.integrations.prometheus import get_custom_labels_from_metadata
def test_get_custom_labels_includes_spend_logs_metadata(monkeypatch):
"""
Test that get_custom_labels_from_metadata extracts fields from
spend_logs_metadata when it is merged into combined_metadata.
"""
monkeypatch.setattr(
"litellm.custom_prometheus_metadata_labels",
["metadata.department", "metadata.env"],
)
# Simulate combined_metadata after merging all three sources
combined_metadata = {
"request_key": "from_requester", # from requester_metadata
"auth_key": "from_auth", # from user_api_key_auth_metadata
"department": "engineering", # from spend_logs_metadata
"env": "production", # from spend_logs_metadata
}
result = get_custom_labels_from_metadata(combined_metadata)
assert result == {
"metadata_department": "engineering",
"metadata_env": "production",
}
def test_spend_logs_metadata_overrides_earlier_sources(monkeypatch):
"""
Test that spend_logs_metadata values take precedence over
requester_metadata and user_api_key_auth_metadata when keys overlap,
since it is spread last in combined_metadata.
"""
monkeypatch.setattr(
"litellm.custom_prometheus_metadata_labels",
["metadata.team"],
)
# Simulate the dict spread order: requester -> auth -> spend_logs
requester_metadata = {"team": "old_team"}
user_api_key_auth_metadata = {"team": "auth_team"}
spend_logs_metadata = {"team": "spend_team"}
combined_metadata = {
**requester_metadata,
**user_api_key_auth_metadata,
**spend_logs_metadata,
}
result = get_custom_labels_from_metadata(combined_metadata)
assert result == {"metadata_team": "spend_team"}
def test_combined_metadata_with_all_three_sources(monkeypatch):
"""
Test that combined_metadata correctly merges requester_metadata,
user_api_key_auth_metadata, and spend_logs_metadata.
"""
monkeypatch.setattr(
"litellm.custom_prometheus_metadata_labels",
["metadata.from_requester", "metadata.from_auth", "metadata.from_spend"],
)
# Reproduce the exact spread pattern from prometheus.py
_requester_metadata = {"from_requester": "val1"}
user_api_key_auth_metadata = {"from_auth": "val2"}
spend_logs_metadata = {"from_spend": "val3"}
combined_metadata = {
**(_requester_metadata if _requester_metadata else {}),
**(user_api_key_auth_metadata if user_api_key_auth_metadata else {}),
**(spend_logs_metadata if spend_logs_metadata else {}),
}
result = get_custom_labels_from_metadata(combined_metadata)
assert result == {
"metadata_from_requester": "val1",
"metadata_from_auth": "val2",
"metadata_from_spend": "val3",
}
def test_combined_metadata_with_none_spend_logs(monkeypatch):
"""
Test that combined_metadata works when spend_logs_metadata is None.
"""
monkeypatch.setattr(
"litellm.custom_prometheus_metadata_labels",
["metadata.foo"],
)
_requester_metadata = {"foo": "bar"}
user_api_key_auth_metadata = None
spend_logs_metadata = None
combined_metadata = {
**(_requester_metadata if _requester_metadata else {}),
**(user_api_key_auth_metadata if user_api_key_auth_metadata else {}),
**(spend_logs_metadata if spend_logs_metadata else {}),
}
result = get_custom_labels_from_metadata(combined_metadata)
assert result == {"metadata_foo": "bar"}