Module: RubyLLM::Instrumentation

Defined in:
lib/ruby_llm/instrumentation.rb

Overview

Emits structured RubyLLM events without requiring a specific observability backend. Rails apps can use ActiveSupport::Notifications as the instrumenter.

Class Method Summary collapse

Class Method Details

.build_payload(payload, attributes) ⇒ Object



27
28
29
30
# File 'lib/ruby_llm/instrumentation.rb', line 27

def build_payload(payload, attributes)
  payload ||= {}
  attributes.empty? ? payload : payload.merge(attributes)
end

.instrument(name, payload = nil, config: nil, **attributes) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ruby_llm/instrumentation.rb', line 9

def instrument(name, payload = nil, config: nil, **attributes)
  payload = build_payload(payload, attributes)
  instrumenter = instrumenter_for(config)
  return yield(payload) if block_given? && !instrumenter

  unless instrumenter.respond_to?(:instrument)
    return yield(payload) if block_given?

    return
  end

  if block_given?
    instrumenter.instrument(name, payload) { yield(payload) }
  else
    instrumenter.instrument(name, payload)
  end
end

.instrumenter_for(config) ⇒ Object



32
33
34
# File 'lib/ruby_llm/instrumentation.rb', line 32

def instrumenter_for(config)
  (config || RubyLLM.config).instrumenter
end