Class: ActiveAgent::Providers::LogSubscriber
- Inherits:
-
ActiveSupport::LogSubscriber
- Object
- ActiveSupport::LogSubscriber
- ActiveAgent::Providers::LogSubscriber
- Defined in:
- lib/active_agent/providers/log_subscriber.rb
Overview
Logs provider operations via ActiveSupport::Notifications events.
Subscribes to instrumented provider events and formats them consistently. Customize by subclassing and attaching your subscriber, or adjust log levels.
Instance Method Summary collapse
-
#connection_error(event) ⇒ void
Logs connection failures with service URI and error details.
-
#embed(event) ⇒ void
Logs completed embedding with model, input size, and token usage.
-
#prompt(event) ⇒ void
Logs completed prompt with model, message count, token usage, and duration.
- #stream_chunk(event) ⇒ void
- #stream_close(event) ⇒ void
- #stream_open(event) ⇒ void
- #tool_call(event) ⇒ void
Instance Method Details
#connection_error(event) ⇒ void
This method returns an undefined value.
Logs connection failures with service URI and error details.
146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/active_agent/providers/log_subscriber.rb', line 146 def connection_error(event) trace_id = event.payload[:trace_id] provider_module = event.payload[:provider_module] uri_base = event.payload[:uri_base] exception = event.payload[:exception] = event.payload[:message] debug do "[#{trace_id}] [ActiveAgent] [#{provider_module}] Unable to connect to #{uri_base}. Please ensure the service is running. Error: #{exception} - #{message}" end end |
#embed(event) ⇒ void
This method returns an undefined value.
Logs completed embedding with model, input size, and token usage.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/active_agent/providers/log_subscriber.rb', line 64 def (event) trace_id = event.payload[:trace_id] provider_module = event.payload[:provider_module] model = event.payload[:model] input_size = event.payload[:input_size] = event.payload[:embedding_count] usage = event.payload[:usage] duration = event.duration.round(1) debug do parts = [ "[#{trace_id}]", "[ActiveAgent]", "[#{provider_module}]" ] parts << "Embed completed:" parts << "model=#{model}" if model parts << "inputs=#{input_size}" if input_size parts << "embeddings=#{embedding_count}" if parts << "tokens=#{usage[:input_tokens]}" if usage parts << "#{duration}ms" parts.join(" ") end end |
#prompt(event) ⇒ void
This method returns an undefined value.
Logs completed prompt with model, message count, token usage, and duration.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/active_agent/providers/log_subscriber.rb', line 28 def prompt(event) trace_id = event.payload[:trace_id] provider_module = event.payload[:provider_module] model = event.payload[:model] = event.payload[:message_count] stream = event.payload[:stream] usage = event.payload[:usage] finish_reason = event.payload[:finish_reason] duration = event.duration.round(1) debug do parts = [ "[#{trace_id}]", "[ActiveAgent]", "[#{provider_module}]" ] parts << "Prompt completed:" parts << "model=#{model}" if model parts << "messages=#{message_count}" parts << "stream=#{stream}" if usage tokens = "tokens=#{usage[:input_tokens]}/#{usage[:output_tokens]}" tokens += " (cached: #{usage[:cached_tokens]})" if usage[:cached_tokens]&.positive? tokens += " (reasoning: #{usage[:reasoning_tokens]})" if usage[:reasoning_tokens]&.positive? parts << tokens end parts << "finish=#{finish_reason}" if finish_reason parts << "#{duration}ms" parts.join(" ") end end |
#stream_chunk(event) ⇒ void
This method returns an undefined value.
127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/active_agent/providers/log_subscriber.rb', line 127 def stream_chunk(event) trace_id = event.payload[:trace_id] provider_module = event.payload[:provider_module] chunk_type = event.payload[:chunk_type] debug do if chunk_type "[#{trace_id}] [ActiveAgent] [#{provider_module}] Stream chunk: #{chunk_type}" else "[#{trace_id}] [ActiveAgent] [#{provider_module}] Stream chunk" end end end |
#stream_close(event) ⇒ void
This method returns an undefined value.
101 102 103 104 105 106 107 108 |
# File 'lib/active_agent/providers/log_subscriber.rb', line 101 def stream_close(event) trace_id = event.payload[:trace_id] provider_module = event.payload[:provider_module] debug do "[#{trace_id}] [ActiveAgent] [#{provider_module}] Closing stream" end end |
#stream_open(event) ⇒ void
This method returns an undefined value.
89 90 91 92 93 94 95 96 |
# File 'lib/active_agent/providers/log_subscriber.rb', line 89 def stream_open(event) trace_id = event.payload[:trace_id] provider_module = event.payload[:provider_module] debug do "[#{trace_id}] [ActiveAgent] [#{provider_module}] Opening stream" end end |
#tool_call(event) ⇒ void
This method returns an undefined value.
113 114 115 116 117 118 119 120 121 122 |
# File 'lib/active_agent/providers/log_subscriber.rb', line 113 def tool_call(event) trace_id = event.payload[:trace_id] provider_module = event.payload[:provider_module] tool_name = event.payload[:tool_name] duration = event.duration.round(1) debug do "[#{trace_id}] [ActiveAgent] [#{provider_module}] Tool call: #{tool_name} (#{duration}ms)" end end |