From c75f105d2a1706e33774c0b2cc0fa1b81849fda3 Mon Sep 17 00:00:00 2001 From: Vinicius Mello Date: Fri, 26 Dec 2025 11:07:13 -0300 Subject: [PATCH] feat: prevent multiple patching in trace_litellm function to avoid duplicate traces --- src/openlayer/lib/integrations/litellm_tracer.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/openlayer/lib/integrations/litellm_tracer.py b/src/openlayer/lib/integrations/litellm_tracer.py index 19a1a0e1..7dd179c4 100644 --- a/src/openlayer/lib/integrations/litellm_tracer.py +++ b/src/openlayer/lib/integrations/litellm_tracer.py @@ -19,6 +19,9 @@ logger = logging.getLogger(__name__) +# Flag to prevent multiple patching +_litellm_traced = False + def trace_litellm() -> None: """Patch the litellm.completion function to trace completions. @@ -57,11 +60,18 @@ def trace_litellm() -> None: ... inference_id="custom-id-123" # Optional Openlayer parameter ... ) """ + global _litellm_traced + if not HAVE_LITELLM: raise ImportError( "LiteLLM library is not installed. Please install it with: pip install litellm" ) + # Prevent multiple patching - this avoids duplicate traces + if _litellm_traced: + logger.debug("trace_litellm() already called - skipping to prevent duplicate traces") + return + original_completion = litellm.completion @wraps(original_completion) @@ -84,6 +94,8 @@ def traced_completion(*args, **kwargs): ) litellm.completion = traced_completion + _litellm_traced = True + logger.debug("litellm.completion has been patched for Openlayer tracing") def handle_streaming_completion(