Class: ActiveAgent::GenerationProvider::LogSubscriber

Inherits:
ActiveSupport::LogSubscriber
  • Object
show all
Defined in:
lib/active_agent/generation_provider/log_subscriber.rb

Overview

Generation Provider \LogSubscriber

Implements the ActiveSupport::LogSubscriber for logging notifications when generation providers make API calls and handle responses.

Instance Method Summary collapse

Instance Method Details

#error(event) ⇒ Object

Error occurred



68
69
70
71
72
73
74
75
76
# File 'lib/active_agent/generation_provider/log_subscriber.rb', line 68

def error(event)
  error do
    provider = event.payload[:provider]
    error_class = event.payload[:error_class]
    error_message = event.payload[:error_message]

    "#{provider}: Error #{error_class} - #{error_message}"
  end
end

#generate(event) ⇒ Object

A generation request was made



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/active_agent/generation_provider/log_subscriber.rb', line 13

def generate(event)
  info do
    provider = event.payload[:provider]
    model = event.payload[:model]

    if exception = event.payload[:exception_object]
      "Failed generation with #{provider} model=#{model} error_class=#{exception.class} error_message=#{exception.message.inspect}"
    else
      "Generated response with #{provider} model=#{model} (#{event.duration.round(1)}ms)"
    end
  end

  debug { event.payload[:prompt] } if event.payload[:prompt]
end

#loggerObject

Use the logger configured for ActiveAgent::Base if available



80
81
82
83
84
85
86
# File 'lib/active_agent/generation_provider/log_subscriber.rb', line 80

def logger
  if defined?(ActiveAgent::Base) && ActiveAgent::Base.respond_to?(:logger)
    ActiveAgent::Base.logger
  else
    super
  end
end

#retry(event) ⇒ Object

Retry attempt



55
56
57
58
59
60
61
62
63
64
# File 'lib/active_agent/generation_provider/log_subscriber.rb', line 55

def retry(event)
  warn do
    provider = event.payload[:provider]
    attempt = event.payload[:attempt]
    max_attempts = event.payload[:max_attempts]
    error_class = event.payload[:error_class]

    "#{provider}: Retry attempt #{attempt}/#{max_attempts} after #{error_class}"
  end
end

#stream_chunk(event) ⇒ Object

Streaming chunk received



30
31
32
33
34
35
36
# File 'lib/active_agent/generation_provider/log_subscriber.rb', line 30

def stream_chunk(event)
  debug do
    provider = event.payload[:provider]
    chunk_size = event.payload[:chunk_size]
    "#{provider}: received stream chunk (#{chunk_size} bytes)"
  end
end

#tool_call(event) ⇒ Object

Tool/function call executed



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/active_agent/generation_provider/log_subscriber.rb', line 40

def tool_call(event)
  info do
    tool_name = event.payload[:tool_name]
    tool_id = event.payload[:tool_id]

    if exception = event.payload[:exception_object]
      "Failed tool call #{tool_name} id=#{tool_id} error=#{exception.class}"
    else
      "Executed tool call #{tool_name} id=#{tool_id} (#{event.duration.round(1)}ms)"
    end
  end
end