Skip to content

Commit 2250043

Browse files
committed
Migrate from legacy ingestion API to OTLP endpoint
- Replace custom Exporter with OpenTelemetry OTLP exporter - Update endpoint from /api/public/ingestion to /api/public/otel/v1/traces - Migrate attribute namespace (langfuse.type → langfuse.observation.type, etc.) - Remove obsolete IngestionClient and custom Exporter classes - Update all tests to match new OTLP endpoint and attribute format - Add opentelemetry-exporter-otlp gem dependency This fixes the issue where nested spans weren't appearing in Langfuse UI. The OTLP endpoint properly handles out-of-order spans using OpenTelemetry's standard parent-child relationships via span_id and parent_span_id.
1 parent 0a3e99c commit 2250043

16 files changed

+179
-1197
lines changed

.claude/settings.local.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"Bash(mkdir:*)",
1010
"WebSearch",
1111
"Read(//Users/noah/dev/simplepractice/simplepractice/**)",
12-
"WebFetch(domain:github.com)"
12+
"WebFetch(domain:github.com)",
13+
"WebFetch(domain:langfuse.com)"
1314
],
1415
"deny": [],
1516
"ask": []

Gemfile.lock

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ PATH
77
mustache (~> 1.1)
88
opentelemetry-api (~> 1.2)
99
opentelemetry-common (~> 0.21)
10+
opentelemetry-exporter-otlp (~> 0.28)
1011
opentelemetry-sdk (~> 1.4)
1112

1213
GEM
@@ -29,6 +30,14 @@ GEM
2930
net-http (>= 0.5.0)
3031
faraday-retry (2.3.2)
3132
faraday (~> 2.0)
33+
google-protobuf (4.33.0-arm64-darwin)
34+
bigdecimal
35+
rake (>= 13)
36+
google-protobuf (4.33.0-x86_64-linux-gnu)
37+
bigdecimal
38+
rake (>= 13)
39+
googleapis-common-protos-types (1.22.0)
40+
google-protobuf (~> 4.26)
3241
hashdiff (1.2.1)
3342
json (2.15.1)
3443
language_server-protocol (3.17.0.5)
@@ -40,6 +49,13 @@ GEM
4049
opentelemetry-api (1.7.0)
4150
opentelemetry-common (0.23.0)
4251
opentelemetry-api (~> 1.0)
52+
opentelemetry-exporter-otlp (0.31.0)
53+
google-protobuf (>= 3.18)
54+
googleapis-common-protos-types (~> 1.3)
55+
opentelemetry-api (~> 1.1)
56+
opentelemetry-common (~> 0.20)
57+
opentelemetry-sdk (~> 1.2)
58+
opentelemetry-semantic_conventions
4359
opentelemetry-registry (0.4.0)
4460
opentelemetry-api (~> 1.1)
4561
opentelemetry-sdk (1.10.0)

langfuse.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Gem::Specification.new do |spec|
3737
# Runtime dependencies - OpenTelemetry (for tracing)
3838
spec.add_dependency "opentelemetry-api", "~> 1.2"
3939
spec.add_dependency "opentelemetry-common", "~> 0.21"
40+
spec.add_dependency "opentelemetry-exporter-otlp", "~> 0.28"
4041
spec.add_dependency "opentelemetry-sdk", "~> 1.4"
4142

4243
# Development dependencies are specified in Gemfile

lib/langfuse.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ class UnauthorizedError < ApiError; end
2929
require_relative "langfuse/config"
3030
require_relative "langfuse/prompt_cache"
3131
require_relative "langfuse/api_client"
32-
require_relative "langfuse/ingestion_client"
33-
require_relative "langfuse/exporter"
3432
require_relative "langfuse/otel_setup"
3533
require_relative "langfuse/tracer"
3634
require_relative "langfuse/trace"

lib/langfuse/exporter.rb

Lines changed: 0 additions & 335 deletions
This file was deleted.

0 commit comments

Comments
 (0)