Class: Ask::OpenTelemetry::Subscriber
- Inherits:
-
Object
- Object
- Ask::OpenTelemetry::Subscriber
- Defined in:
- lib/ask/open_telemetry/subscriber.rb
Overview
Subscribes to Ask::Instrumentation events and creates OpenTelemetry spans.
Maps each event name to a span name:
"chat.ask" → "llm.chat"
"chat.stream.ask" → "llm.chat"
"tool.ask" → "llm.tool"
"embedding.ask" → "llm.embedding"
"image.ask" → "llm.image"
Forwards the event payload as span attributes under the llm.* namespace and merges in any metadata from Ask::Instrumentation.current_metadata.
Constant Summary collapse
- SPAN_NAMES =
Event name pattern → OpenTelemetry span name.
{ "chat.ask" => "llm.chat", "chat.stream.ask" => "llm.chat", "tool.ask" => "llm.tool", "embedding.ask" => "llm.embedding", "image.ask" => "llm.image" }.freeze
Instance Method Summary collapse
-
#call(event) ⇒ Object
Invoked by
ActiveSupport::Notificationsfor each matching event.
Instance Method Details
#call(event) ⇒ Object
Invoked by ActiveSupport::Notifications for each matching event.
27 28 29 30 31 32 33 34 |
# File 'lib/ask/open_telemetry/subscriber.rb', line 27 def call(event) span_name = SPAN_NAMES[event.name] return unless span_name tracer.in_span(span_name, attributes: attributes_for(event)) do |span| span.set_attribute("llm.duration_ms", (event.duration * 1000).round(2)) end end |