langfuse-rb 0.12.1 → 0.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20d0cd9db76be223db4867cbc9f54f59ee5accc0058e29bab14561c457d8fecc
4
- data.tar.gz: b43bd144dca940b375ac916feca399f9e10da54db201fff9f4d140acdd301ec5
3
+ metadata.gz: f1dc8a77f2444284be3d7ebcec4379a0c21d04731c1e7acc8617d5a2482d0fe4
4
+ data.tar.gz: 9841995cd57d0cce72158d54bb267af26e59484de4abe52244713746e92d61ef
5
5
  SHA512:
6
- metadata.gz: 66175d8c844c314ac8f62180e98d3bc95f8fb3934ea71880d7bd7e21fc5bbbd06f472a5b992cb4529929aab27cc153a7641f8f2a0f73ffb2ed869df127056980
7
- data.tar.gz: 0e7a1e8e7a34aeaa964d8b1c0295c6448a3fa58e075c1bdda6e6aafe98b00ee9d48a7e904c3724b1b2ab42d166119bf80b6aa7be21eb750b072768d6588363d3
6
+ metadata.gz: f881f5df2b41e27f5825d8b71ee05d53680199fa2511b6fa3f2c9abad73a00ebe1dc8e8d5293d073909917980bd116f21d1394e1fdbd1e812303a47c085bcb34
7
+ data.tar.gz: 81a7274d6d1545a6e759b938a60135542714e42d6b9f5c751bd45f4ad0f3ff22f3259d68352580d08748048380319273f5fce1566682e053248d2f1decb9cb89
data/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.12.3] - 2026-09-15
11
+
12
+ ### Changed
13
+ - Allow JSON 3.x and require Faraday 2.14.4 or newer for compatible response parsing (#123).
14
+
15
+ ## [0.12.2] - 2026-09-04
16
+
17
+ ### Fixed
18
+ - Forward OTLP exporter metrics to the configured metrics reporter (#117).
19
+
10
20
  ## [0.12.1] - 2026-09-03
11
21
 
12
22
  ### Fixed
@@ -178,7 +188,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
178
188
  - Migrated from legacy ingestion API to OTLP endpoint
179
189
  - Removed `tracing_enabled` configuration flag (#2)
180
190
 
181
- [Unreleased]: https://github.com/simplepractice/langfuse-rb/compare/v0.12.1...HEAD
191
+ [Unreleased]: https://github.com/simplepractice/langfuse-rb/compare/v0.12.3...HEAD
192
+ [0.12.3]: https://github.com/simplepractice/langfuse-rb/compare/v0.12.2...v0.12.3
193
+ [0.12.2]: https://github.com/simplepractice/langfuse-rb/compare/v0.12.1...v0.12.2
182
194
  [0.12.1]: https://github.com/simplepractice/langfuse-rb/compare/v0.12.0...v0.12.1
183
195
  [0.12.0]: https://github.com/simplepractice/langfuse-rb/compare/v0.11.0...v0.12.0
184
196
  [0.11.0]: https://github.com/simplepractice/langfuse-rb/compare/v0.10.1...v0.11.0
@@ -113,8 +113,9 @@ module Langfuse
113
113
  attr_accessor :mask_otel_spans
114
114
 
115
115
  # @return [#add_to_counter, #record_value, #observe_value, nil] Reporter for
116
- # OpenTelemetry batch span processor metrics. The reporter must be fast,
117
- # thread-safe, and nonblocking. The application owns its lifecycle.
116
+ # OpenTelemetry batch processor and OTLP exporter metrics. The reporter
117
+ # must be fast, thread-safe, and nonblocking. The application owns its
118
+ # lifecycle.
118
119
  attr_accessor :metrics_reporter
119
120
 
120
121
  # @return [#export, #force_flush, #shutdown, nil] Span exporter used by
@@ -5,6 +5,7 @@ require "opentelemetry/exporter/otlp"
5
5
  require "base64"
6
6
  require_relative "masking_exporter"
7
7
  require_relative "trace_export_guard"
8
+ require_relative "resilient_metrics_reporter"
8
9
 
9
10
  module Langfuse
10
11
  # OpenTelemetry initialization and setup for Langfuse tracing.
@@ -112,33 +113,39 @@ module Langfuse
112
113
  end
113
114
 
114
115
  def build_tracer_provider(config)
115
- provider = OpenTelemetry::SDK::Trace::TracerProvider.new(
116
- sampler: build_sampler(config.sample_rate)
116
+ metrics_reporter = wrap_metrics_reporter(config)
117
+ exporter = build_exporter(config, metrics_reporter: metrics_reporter)
118
+ processor = SpanProcessor.new(
119
+ config: config,
120
+ exporter: TraceExportGuard.new(delegate: exporter, config: config),
121
+ metrics_reporter: metrics_reporter
117
122
  )
118
- provider.add_span_processor(
119
- SpanProcessor.new(
120
- config: config,
121
- exporter: TraceExportGuard.new(delegate: build_exporter(config), config: config)
122
- )
123
- )
124
- provider
123
+
124
+ OpenTelemetry::SDK::Trace::TracerProvider
125
+ .new(sampler: build_sampler(config.sample_rate))
126
+ .tap { |provider| provider.add_span_processor(processor) }
125
127
  end
126
128
 
127
- def build_exporter(config)
128
- exporter = config.span_exporter || build_otlp_exporter(config)
129
+ def build_exporter(config, metrics_reporter:)
130
+ exporter = config.span_exporter || build_otlp_exporter(config, metrics_reporter: metrics_reporter)
129
131
  return exporter unless config.mask_otel_spans
130
132
 
131
133
  MaskingExporter.new(delegate: exporter, hook: config.mask_otel_spans, logger: config.logger)
132
134
  end
133
135
 
134
- def build_otlp_exporter(config)
136
+ def build_otlp_exporter(config, metrics_reporter:)
135
137
  OpenTelemetry::Exporter::OTLP::Exporter.new(
136
138
  endpoint: "#{config.base_url}/api/public/otel/v1/traces",
137
139
  headers: build_headers(config.public_key, config.secret_key),
138
- compression: "gzip"
140
+ compression: "gzip",
141
+ metrics_reporter: metrics_reporter
139
142
  )
140
143
  end
141
144
 
145
+ def wrap_metrics_reporter(config)
146
+ ResilientMetricsReporter.wrap(config.metrics_reporter, logger: config.logger)
147
+ end
148
+
142
149
  def log_initialized(config)
143
150
  mode = config.tracing_async ? "async" : "sync"
144
151
  config.logger.info("Langfuse tracing initialized with OpenTelemetry (#{mode} mode)")
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "opentelemetry/sdk"
4
- require_relative "resilient_metrics_reporter"
5
4
 
6
5
  module Langfuse
7
6
  # Batch span processor that owns Langfuse's enrichment and export filtering.
@@ -10,7 +9,9 @@ module Langfuse
10
9
  class SpanProcessor < OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor
11
10
  # @param config [Langfuse::Config] SDK configuration used for defaults and filtering
12
11
  # @param exporter [#export, #force_flush, #shutdown] Span exporter used by the batch processor
13
- def initialize(config:, exporter:)
12
+ # @param metrics_reporter [#add_to_counter, #record_value, #observe_value, nil]
13
+ # Resilient reporter shared with the OTLP exporter
14
+ def initialize(config:, exporter:, metrics_reporter:)
14
15
  @logger = config.logger
15
16
  @default_trace_attributes = build_default_trace_attributes(config).freeze
16
17
  @should_export_span = config.should_export_span || Langfuse.method(:default_export_span?)
@@ -21,7 +22,7 @@ module Langfuse
21
22
  max_queue_size: config.batch_size * 2,
22
23
  schedule_delay: schedule_delay_for(config),
23
24
  max_export_batch_size: config.batch_size,
24
- metrics_reporter: ResilientMetricsReporter.wrap(config.metrics_reporter, logger: config.logger)
25
+ metrics_reporter: metrics_reporter
25
26
  )
26
27
  end
27
28
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Langfuse
4
- VERSION = "0.12.1"
4
+ VERSION = "0.12.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: langfuse-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.12.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - SimplePractice
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-03 00:00:00.000000000 Z
11
+ date: 2026-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.14.3
19
+ version: 2.14.4
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '3'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 2.14.3
29
+ version: 2.14.4
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3'
@@ -68,22 +68,22 @@ dependencies:
68
68
  name: json
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '2.19'
74
71
  - - ">="
75
72
  - !ruby/object:Gem::Version
76
73
  version: 2.19.9
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '4'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '2.19'
84
81
  - - ">="
85
82
  - !ruby/object:Gem::Version
86
83
  version: 2.19.9
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: '4'
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: concurrent-ruby
89
89
  requirement: !ruby/object:Gem::Requirement