From 5d0b89eb1090156bc648ff790774bf57af1aab78 Mon Sep 17 00:00:00 2001 From: yucheng Date: Mon, 14 Sep 2026 21:23:39 +0000 Subject: [PATCH] refactor(langfuse): type the slack trace-url lookup and drop dead v2 test shims Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- litellm/integrations/SlackAlerting/utils.py | 8 ++++---- tests/test_litellm/integrations/test_langfuse.py | 9 --------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/litellm/integrations/SlackAlerting/utils.py b/litellm/integrations/SlackAlerting/utils.py index 4a2e116d4a9..77361860327 100644 --- a/litellm/integrations/SlackAlerting/utils.py +++ b/litellm/integrations/SlackAlerting/utils.py @@ -82,10 +82,10 @@ async def _add_langfuse_trace_id_to_alert( break await asyncio.sleep(3) # wait 3s before retrying for trace id ######################################################### + from litellm.integrations.langfuse.langfuse import LangFuseLogger + langfuse_object: Final = litellm_logging_obj._get_callback_object(service_name="langfuse") - if langfuse_object is not None: - base_url: Final = getattr(langfuse_object, "langfuse_host", None) - if base_url is not None: - return f"{base_url}/trace/{trace_id}" + if isinstance(langfuse_object, LangFuseLogger): + return f"{langfuse_object.langfuse_host}/trace/{trace_id}" return None diff --git a/tests/test_litellm/integrations/test_langfuse.py b/tests/test_litellm/integrations/test_langfuse.py index 490bf35d3ad..392944b4624 100644 --- a/tests/test_litellm/integrations/test_langfuse.py +++ b/tests/test_litellm/integrations/test_langfuse.py @@ -77,8 +77,6 @@ class TestLangfuseUsageDetails(unittest.TestCase): # Explicitly set the Langfuse client to our mock self.logger.Langfuse = self.mock_langfuse_client - # Ensure langfuse_sdk_version is set correctly for _supports_* methods - self.logger.langfuse_sdk_version = "3.0.0" # Add the log_event_on_langfuse method to the instance def log_event_on_langfuse( @@ -110,12 +108,6 @@ class TestLangfuseUsageDetails(unittest.TestCase): # Bind the method to the instance self.logger.log_event_on_langfuse = types.MethodType(log_event_on_langfuse, self.logger) - # Make sure _is_langfuse_v2 returns True - def mock_is_langfuse_v2(self): - return True - - self.logger._is_langfuse_v2 = types.MethodType(mock_is_langfuse_v2, self.logger) - def tearDown(self): # Clean up logger instance to prevent state leakage if hasattr(self, "logger"): @@ -133,7 +125,6 @@ class TestLangfuseUsageDetails(unittest.TestCase): """Point the logger at a real v4 client whose spans land in memory.""" from langfuse._client.resource_manager import LangfuseResourceManager from opentelemetry.sdk.trace import TracerProvider - from opentelemetry.sdk.trace.export import SimpleSpanProcessor from opentelemetry.sdk.trace.export.in_memory_span_exporter import ( InMemorySpanExporter, )