|
21 | 21 | from litellm.integrations.custom_logger import CustomLogger
|
22 | 22 | from litellm.proxy._types import LiteLLM_TeamTable, UserAPIKeyAuth
|
23 | 23 | from litellm.types.integrations.prometheus import *
|
| 24 | +from litellm.types.integrations.prometheus import _sanitize_prometheus_label_name |
24 | 25 | from litellm.types.utils import StandardLoggingPayload
|
25 | 26 | from litellm.utils import get_end_user_id_for_cost_tracking
|
26 | 27 |
|
@@ -794,9 +795,16 @@ async def async_log_success_event(self, kwargs, response_obj, start_time, end_ti
|
794 | 795 | output_tokens = standard_logging_payload["completion_tokens"]
|
795 | 796 | tokens_used = standard_logging_payload["total_tokens"]
|
796 | 797 | response_cost = standard_logging_payload["response_cost"]
|
797 |
| - _requester_metadata = standard_logging_payload["metadata"].get( |
| 798 | + _requester_metadata: Optional[dict] = standard_logging_payload["metadata"].get( |
798 | 799 | "requester_metadata"
|
799 | 800 | )
|
| 801 | + user_api_key_auth_metadata: Optional[dict] = standard_logging_payload[ |
| 802 | + "metadata" |
| 803 | + ].get("user_api_key_auth_metadata") |
| 804 | + combined_metadata: Dict[str, Any] = { |
| 805 | + **(_requester_metadata if _requester_metadata else {}), |
| 806 | + **(user_api_key_auth_metadata if user_api_key_auth_metadata else {}), |
| 807 | + } |
800 | 808 | if standard_logging_payload is not None and isinstance(
|
801 | 809 | standard_logging_payload, dict
|
802 | 810 | ):
|
@@ -828,8 +836,7 @@ async def async_log_success_event(self, kwargs, response_obj, start_time, end_ti
|
828 | 836 | exception_status=None,
|
829 | 837 | exception_class=None,
|
830 | 838 | custom_metadata_labels=get_custom_labels_from_metadata(
|
831 |
| - metadata=standard_logging_payload["metadata"].get("requester_metadata") |
832 |
| - or {} |
| 839 | + metadata=combined_metadata |
833 | 840 | ),
|
834 | 841 | route=standard_logging_payload["metadata"].get(
|
835 | 842 | "user_api_key_request_route"
|
@@ -1649,9 +1656,22 @@ def set_litellm_deployment_state(
|
1649 | 1656 | api_base: Optional[str],
|
1650 | 1657 | api_provider: str,
|
1651 | 1658 | ):
|
1652 |
| - self.litellm_deployment_state.labels( |
1653 |
| - litellm_model_name, model_id, api_base, api_provider |
1654 |
| - ).set(state) |
| 1659 | + """ |
| 1660 | + Set the deployment state. |
| 1661 | + """ |
| 1662 | + ### get labels |
| 1663 | + _labels = prometheus_label_factory( |
| 1664 | + supported_enum_labels=self.get_labels_for_metric( |
| 1665 | + metric_name="litellm_deployment_state" |
| 1666 | + ), |
| 1667 | + enum_values=UserAPIKeyLabelValues( |
| 1668 | + litellm_model_name=litellm_model_name, |
| 1669 | + model_id=model_id, |
| 1670 | + api_base=api_base, |
| 1671 | + api_provider=api_provider, |
| 1672 | + ), |
| 1673 | + ) |
| 1674 | + self.litellm_deployment_state.labels(**_labels).set(state) |
1655 | 1675 |
|
1656 | 1676 | def set_deployment_healthy(
|
1657 | 1677 | self,
|
@@ -2228,8 +2248,10 @@ def prometheus_label_factory(
|
2228 | 2248 |
|
2229 | 2249 | if enum_values.custom_metadata_labels is not None:
|
2230 | 2250 | for key, value in enum_values.custom_metadata_labels.items():
|
2231 |
| - if key in supported_enum_labels: |
2232 |
| - filtered_labels[key] = value |
| 2251 | + # check sanitized key |
| 2252 | + sanitized_key = _sanitize_prometheus_label_name(key) |
| 2253 | + if sanitized_key in supported_enum_labels: |
| 2254 | + filtered_labels[sanitized_key] = value |
2233 | 2255 |
|
2234 | 2256 | # Add custom tags if configured
|
2235 | 2257 | if enum_values.tags is not None:
|
|
0 commit comments