From ca1329b572e6ffd4860e3ae7ce93af357e027919 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Wed, 29 Jul 2026 17:38:55 +0900 Subject: [PATCH] fix: handle missing Langfuse dynamic params --- .../integrations/langfuse/langfuse_handler.py | 7 +++-- tests/test_litellm/test_langfuse_handler.py | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 tests/test_litellm/test_langfuse_handler.py diff --git a/litellm/integrations/langfuse/langfuse_handler.py b/litellm/integrations/langfuse/langfuse_handler.py index b1d083bd7d4..1dc955bb6cd 100644 --- a/litellm/integrations/langfuse/langfuse_handler.py +++ b/litellm/integrations/langfuse/langfuse_handler.py @@ -21,7 +21,7 @@ else: class LangFuseHandler: @staticmethod def get_langfuse_logger_for_request( - standard_callback_dynamic_params: StandardCallbackDynamicParams, + standard_callback_dynamic_params: StandardCallbackDynamicParams | None, in_memory_dynamic_logger_cache: DynamicLoggingCache, globalLangfuseLogger: Optional[LangFuseLogger] = None, ) -> LangFuseLogger: @@ -139,7 +139,7 @@ class LangFuseHandler: @staticmethod def _dynamic_langfuse_credentials_are_passed( - standard_callback_dynamic_params: StandardCallbackDynamicParams, + standard_callback_dynamic_params: StandardCallbackDynamicParams | None, ) -> bool: """ This function is used to check if the dynamic langfuse credentials are passed in standard_callback_dynamic_params @@ -148,6 +148,9 @@ class LangFuseHandler: bool: True if the dynamic langfuse credentials are passed, False otherwise """ + if standard_callback_dynamic_params is None: + return False + if ( standard_callback_dynamic_params.get("langfuse_host") is not None or standard_callback_dynamic_params.get("langfuse_public_key") is not None diff --git a/tests/test_litellm/test_langfuse_handler.py b/tests/test_litellm/test_langfuse_handler.py new file mode 100644 index 00000000000..3eaa98f8e05 --- /dev/null +++ b/tests/test_litellm/test_langfuse_handler.py @@ -0,0 +1,26 @@ +from unittest.mock import MagicMock + +from litellm.integrations.langfuse.langfuse_handler import LangFuseHandler + + +def test_missing_dynamic_params_returns_global_logger() -> None: + global_logger = MagicMock() + dynamic_logger_cache = MagicMock() + + logger = LangFuseHandler.get_langfuse_logger_for_request( + standard_callback_dynamic_params=None, + in_memory_dynamic_logger_cache=dynamic_logger_cache, + globalLangfuseLogger=global_logger, + ) + + assert logger is global_logger + dynamic_logger_cache.get_cache.assert_not_called() + + +def test_missing_dynamic_params_are_not_dynamic_credentials() -> None: + assert ( + LangFuseHandler._dynamic_langfuse_credentials_are_passed( + standard_callback_dynamic_params=None + ) + is False + )