Spaces:
Paused
Paused
| """ | |
| This file contains the LangFuseHandler class | |
| Used to get the LangFuseLogger for a given request | |
| Handles Key/Team Based Langfuse Logging | |
| """ | |
| from typing import TYPE_CHECKING, Any, Dict, Optional | |
| from litellm.litellm_core_utils.litellm_logging import StandardCallbackDynamicParams | |
| from .langfuse import LangFuseLogger, LangfuseLoggingConfig | |
| if TYPE_CHECKING: | |
| from litellm.litellm_core_utils.litellm_logging import DynamicLoggingCache | |
| else: | |
| DynamicLoggingCache = Any | |
| class LangFuseHandler: | |
| def get_langfuse_logger_for_request( | |
| standard_callback_dynamic_params: StandardCallbackDynamicParams, | |
| in_memory_dynamic_logger_cache: DynamicLoggingCache, | |
| globalLangfuseLogger: Optional[LangFuseLogger] = None, | |
| ) -> LangFuseLogger: | |
| """ | |
| This function is used to get the LangFuseLogger for a given request | |
| 1. If dynamic credentials are passed | |
| - check if a LangFuseLogger is cached for the dynamic credentials | |
| - if cached LangFuseLogger is not found, create a new LangFuseLogger and cache it | |
| 2. If dynamic credentials are not passed return the globalLangfuseLogger | |
| """ | |
| temp_langfuse_logger: Optional[LangFuseLogger] = globalLangfuseLogger | |
| if ( | |
| LangFuseHandler._dynamic_langfuse_credentials_are_passed( | |
| standard_callback_dynamic_params | |
| ) | |
| is False | |
| ): | |
| return LangFuseHandler._return_global_langfuse_logger( | |
| globalLangfuseLogger=globalLangfuseLogger, | |
| in_memory_dynamic_logger_cache=in_memory_dynamic_logger_cache, | |
| ) | |
| # get langfuse logging config to use for this request, based on standard_callback_dynamic_params | |
| _credentials = LangFuseHandler.get_dynamic_langfuse_logging_config( | |
| globalLangfuseLogger=globalLangfuseLogger, | |
| standard_callback_dynamic_params=standard_callback_dynamic_params, | |
| ) | |
| credentials_dict = dict(_credentials) | |
| # check if langfuse logger is already cached | |
| temp_langfuse_logger = in_memory_dynamic_logger_cache.get_cache( | |
| credentials=credentials_dict, service_name="langfuse" | |
| ) | |
| # if not cached, create a new langfuse logger and cache it | |
| if temp_langfuse_logger is None: | |
| temp_langfuse_logger = ( | |
| LangFuseHandler._create_langfuse_logger_from_credentials( | |
| credentials=credentials_dict, | |
| in_memory_dynamic_logger_cache=in_memory_dynamic_logger_cache, | |
| ) | |
| ) | |
| return temp_langfuse_logger | |
| def _return_global_langfuse_logger( | |
| globalLangfuseLogger: Optional[LangFuseLogger], | |
| in_memory_dynamic_logger_cache: DynamicLoggingCache, | |
| ) -> LangFuseLogger: | |
| """ | |
| Returns the Global LangfuseLogger set on litellm | |
| (this is the default langfuse logger - used when no dynamic credentials are passed) | |
| If no Global LangfuseLogger is set, it will check in_memory_dynamic_logger_cache for a cached LangFuseLogger | |
| This function is used to return the globalLangfuseLogger if it exists, otherwise it will check in_memory_dynamic_logger_cache for a cached LangFuseLogger | |
| """ | |
| if globalLangfuseLogger is not None: | |
| return globalLangfuseLogger | |
| credentials_dict: Dict[ | |
| str, Any | |
| ] = ( | |
| {} | |
| ) # the global langfuse logger uses Environment Variables, there are no dynamic credentials | |
| globalLangfuseLogger = in_memory_dynamic_logger_cache.get_cache( | |
| credentials=credentials_dict, | |
| service_name="langfuse", | |
| ) | |
| if globalLangfuseLogger is None: | |
| globalLangfuseLogger = ( | |
| LangFuseHandler._create_langfuse_logger_from_credentials( | |
| credentials=credentials_dict, | |
| in_memory_dynamic_logger_cache=in_memory_dynamic_logger_cache, | |
| ) | |
| ) | |
| return globalLangfuseLogger | |
| def _create_langfuse_logger_from_credentials( | |
| credentials: Dict, | |
| in_memory_dynamic_logger_cache: DynamicLoggingCache, | |
| ) -> LangFuseLogger: | |
| """ | |
| This function is used to | |
| 1. create a LangFuseLogger from the credentials | |
| 2. cache the LangFuseLogger to prevent re-creating it for the same credentials | |
| """ | |
| langfuse_logger = LangFuseLogger( | |
| langfuse_public_key=credentials.get("langfuse_public_key"), | |
| langfuse_secret=credentials.get("langfuse_secret"), | |
| langfuse_host=credentials.get("langfuse_host"), | |
| ) | |
| in_memory_dynamic_logger_cache.set_cache( | |
| credentials=credentials, | |
| service_name="langfuse", | |
| logging_obj=langfuse_logger, | |
| ) | |
| return langfuse_logger | |
| def get_dynamic_langfuse_logging_config( | |
| standard_callback_dynamic_params: StandardCallbackDynamicParams, | |
| globalLangfuseLogger: Optional[LangFuseLogger] = None, | |
| ) -> LangfuseLoggingConfig: | |
| """ | |
| This function is used to get the Langfuse logging config to use for a given request. | |
| It checks if the dynamic parameters are provided in the standard_callback_dynamic_params and uses them to get the Langfuse logging config. | |
| If no dynamic parameters are provided, it uses the `globalLangfuseLogger` values | |
| """ | |
| # only use dynamic params if langfuse credentials are passed dynamically | |
| return LangfuseLoggingConfig( | |
| langfuse_secret=standard_callback_dynamic_params.get("langfuse_secret") | |
| or standard_callback_dynamic_params.get("langfuse_secret_key"), | |
| langfuse_public_key=standard_callback_dynamic_params.get( | |
| "langfuse_public_key" | |
| ), | |
| langfuse_host=standard_callback_dynamic_params.get("langfuse_host"), | |
| ) | |
| def _dynamic_langfuse_credentials_are_passed( | |
| standard_callback_dynamic_params: StandardCallbackDynamicParams, | |
| ) -> bool: | |
| """ | |
| This function is used to check if the dynamic langfuse credentials are passed in standard_callback_dynamic_params | |
| Returns: | |
| bool: True if the dynamic langfuse credentials are passed, False otherwise | |
| """ | |
| if ( | |
| standard_callback_dynamic_params.get("langfuse_host") is not None | |
| or standard_callback_dynamic_params.get("langfuse_public_key") is not None | |
| or standard_callback_dynamic_params.get("langfuse_secret") is not None | |
| or standard_callback_dynamic_params.get("langfuse_secret_key") is not None | |
| ): | |
| return True | |
| return False | |