diff --git a/litellm/caching.py b/litellm/caching.py index 67c15253c..3f14b8468 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -21,6 +21,7 @@ from openai._models import BaseModel as OpenAIObject import litellm from litellm._logging import verbose_logger +from litellm.integrations.opentelemetry import _get_parent_otel_span_from_kwargs from litellm.types.services import ServiceLoggerPayload, ServiceTypes @@ -33,16 +34,6 @@ def print_verbose(print_statement): pass -def _get_parent_otel_span_from_kwargs(kwargs: Optional[dict] = None): - try: - if kwargs is None: - return None - _metadata = kwargs.get("metadata") or {} - return _metadata.get("litellm_parent_otel_span") - except: - return None - - class BaseCache: def set_cache(self, key, value, **kwargs): raise NotImplementedError diff --git a/litellm/integrations/opentelemetry.py b/litellm/integrations/opentelemetry.py index ef14ad679..e44bc6bee 100644 --- a/litellm/integrations/opentelemetry.py +++ b/litellm/integrations/opentelemetry.py @@ -703,3 +703,24 @@ class OpenTelemetry(CustomLogger): management_endpoint_span.set_attribute(f"exception", str(_exception)) management_endpoint_span.set_status(Status(StatusCode.ERROR)) management_endpoint_span.end(end_time=_end_time_ns) + + +# Helper functions used for OTEL logging +def _get_parent_otel_span_from_kwargs(kwargs: Optional[dict] = None): + try: + if kwargs is None: + return None + litellm_params = kwargs.get("litellm_params") + _metadata = kwargs.get("metadata") or {} + if "litellm_parent_otel_span" in _metadata: + return _metadata["litellm_parent_otel_span"] + elif ( + litellm_params is not None + and litellm_params.get("metadata") is not None + and "litellm_parent_otel_span" in litellm_params.get("metadata", {}) + ): + return litellm_params["metadata"]["litellm_parent_otel_span"] + elif "litellm_parent_otel_span" in kwargs: + return kwargs["litellm_parent_otel_span"] + except: + return None