Skip to content

Conversation

@jannikmaierhoefer
Copy link

Improve OpenTelemetry TracerProvider initialization to be compatible with non-SDK providers like ddtrace v4.x.

Previously, if a non-SDK TracerProvider (e.g., from ddtrace v4.x) was globally set, Langfuse would fail due to the absence of the add_span_processor method. This change allows Langfuse to create and use its own SDK TracerProvider internally without attempting to override the existing global provider, preventing AttributeError and "Overriding of current TracerProvider is not allowed" errors.


Open in Cursor Open in Web

When ddtrace (v4.x) or similar OpenTelemetry integrations set up an API-only
TracerProvider before Langfuse initializes, Langfuse would fail with:
  AttributeError: 'TracerProvider' object has no attribute 'add_span_processor'

This occurred because Langfuse assumed that any non-ProxyTracerProvider would
be an SDK TracerProvider with the add_span_processor method.

The fix updates _init_tracer_provider() to handle three scenarios:
1. No provider set (ProxyTracerProvider): Creates SDK provider and sets as global
2. SDK TracerProvider already set: Reuses the existing provider
3. Non-SDK TracerProvider (e.g., ddtrace): Creates a new SDK provider for
   Langfuse without overriding the global provider

This allows Langfuse to work alongside ddtrace and other OpenTelemetry
integrations that don't use the SDK TracerProvider.

Addresses issue reported in GitHub discussions about ddtrace v4.x compatibility.

Co-authored-by: jannik <jannik@langfuse.com>
@cursor
Copy link

cursor bot commented Jan 27, 2026

Cursor Agent can help with this pull request. Just @cursor in comments and I'll start working on changes in this branch.
Learn more about Cursor Agents

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants