Class: Smith::Trace::OpenTelemetry

Inherits:
Object
  • Object
show all
Defined in:
lib/smith/trace/open_telemetry.rb

Constant Summary collapse

CONFIG_MAP =
{
  transition: :trace_transitions,
  tool_call: :trace_tool_calls,
  token_usage: :trace_token_usage,
  cost: :trace_cost
}.freeze
CONTENT_KEYS =
%i[content prompt response args result].freeze

Instance Method Summary collapse

Constructor Details

#initializeOpenTelemetry

Returns a new instance of OpenTelemetry.



15
16
17
18
19
20
21
22
23
24
# File 'lib/smith/trace/open_telemetry.rb', line 15

def initialize
  require "opentelemetry-api"
  @tracer = ::OpenTelemetry.tracer_provider.tracer("smith", Smith::VERSION)
rescue LoadError
  @tracer = nil
  Smith.config.logger&.warn(
    "Smith::Trace::OpenTelemetry requires the opentelemetry-api gem. " \
    "Add it to your Gemfile to enable OpenTelemetry tracing."
  )
end

Instance Method Details

#record(type:, data:) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'lib/smith/trace/open_telemetry.rb', line 26

def record(type:, data:)
  return unless @tracer
  return unless type_enabled?(type)

  filtered = filter_content(data)
  @tracer.in_span("smith.#{type}") do |span|
    filtered.each { |key, value| span.set_attribute("smith.#{key}", value.to_s) }
  end
end