diff --git a/litellm/__init__.py b/litellm/__init__.py index 5429e3cfcd..1c831f0124 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -53,18 +53,7 @@ _known_custom_logger_compatible_callbacks: List = list( get_args(_custom_logger_compatible_callbacks_literal) ) callbacks: List[Union[Callable, _custom_logger_compatible_callbacks_literal]] = [] -_langfuse_default_tags: Optional[ - List[ - Literal[ - "user_api_key_alias", - "user_api_key_user_id", - "user_api_key_user_email", - "user_api_key_team_alias", - "semantic-similarity", - "proxy_base_url", - ] - ] -] = None +langfuse_default_tags: Optional[List[str]] = None _async_input_callback: List[Callable] = ( [] ) # internal variable - async custom callbacks are routed here. diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index df4be3a5bc..864fb34e20 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -366,12 +366,11 @@ class LangFuseLogger: clean_metadata = {} if isinstance(metadata, dict): for key, value in metadata.items(): - # generate langfuse tags - Default Tags sent to Langfuse from LiteLLM Proxy if ( - litellm._langfuse_default_tags is not None - and isinstance(litellm._langfuse_default_tags, list) - and key in litellm._langfuse_default_tags + litellm.langfuse_default_tags is not None + and isinstance(litellm.langfuse_default_tags, list) + and key in litellm.langfuse_default_tags ): tags.append(f"{key}:{value}") @@ -386,6 +385,11 @@ class LangFuseLogger: else: clean_metadata[key] = value + # Add default langfuse tags + tags = self.add_default_langfuse_tags( + tags=tags, kwargs=kwargs, metadata=metadata + ) + session_id = clean_metadata.pop("session_id", None) trace_name = clean_metadata.pop("trace_name", None) trace_id = clean_metadata.pop("trace_id", litellm_call_id) @@ -468,9 +472,9 @@ class LangFuseLogger: clean_metadata["litellm_response_cost"] = cost if ( - litellm._langfuse_default_tags is not None - and isinstance(litellm._langfuse_default_tags, list) - and "proxy_base_url" in litellm._langfuse_default_tags + litellm.langfuse_default_tags is not None + and isinstance(litellm.langfuse_default_tags, list) + and "proxy_base_url" in litellm.langfuse_default_tags ): proxy_base_url = os.environ.get("PROXY_BASE_URL", None) if proxy_base_url is not None: @@ -583,6 +587,27 @@ class LangFuseLogger: verbose_logger.error(f"Langfuse Layer Error - {traceback.format_exc()}") return None, None + def add_default_langfuse_tags(self, tags, kwargs, metadata): + """ + Helper function to add litellm default langfuse tags + + - Special LiteLLM tags: + - cache_hit + - cache_key + + """ + if litellm.langfuse_default_tags is not None and isinstance( + litellm.langfuse_default_tags, list + ): + if "cache_hit" in litellm.langfuse_default_tags: + _cache_hit_value = kwargs.get("cache_hit", False) + tags.append(f"cache_hit:{_cache_hit_value}") + if "cache_key" in litellm.langfuse_default_tags: + _hidden_params = metadata.get("hidden_params", {}) or {} + _cache_key = _hidden_params.get("cache_key", None) + tags.append(f"cache_key:{_cache_key}") + return tags + def _add_prompt_to_generation_params( generation_params: dict, clean_metadata: dict