Class: Ask::Agent::Middleware::LogCalls
- Defined in:
- lib/ask/agent/middleware/log_calls.rb
Overview
Logs LLM provider calls — request details, duration, token usage, and errors.
Uses a configurable logger (defaults to $stdout via Ruby's Logger).
Each call is logged at INFO level on success, WARN level on failure.
Instance Method Summary collapse
- #around_request(provider, request) ⇒ Object
-
#initialize(logger: nil) ⇒ LogCalls
constructor
A new instance of LogCalls.
Constructor Details
#initialize(logger: nil) ⇒ LogCalls
Returns a new instance of LogCalls.
14 15 16 |
# File 'lib/ask/agent/middleware/log_calls.rb', line 14 def initialize(logger: nil) @logger = logger || default_logger end |
Instance Method Details
#around_request(provider, request) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ask/agent/middleware/log_calls.rb', line 18 def around_request(provider, request) model = request[:model] tool_count = request[:tools]&.length.to_i msg_count = request[:messages]&.length.to_i @logger.info("[ask-agent] LLM call starting — model=#{model} tools=#{tool_count} messages=#{msg_count}") start = Process.clock_gettime(Process::CLOCK_MONOTONIC) begin result = yield elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start if result.respond_to?(:accumulated_usage) usage = result.accumulated_usage tokens = "#{usage[:input_tokens] || '?'}i / #{usage[:output_tokens] || '?'}o" @logger.info("[ask-agent] LLM call completed — model=#{model} duration=#{elapsed.round(3)}s tokens=#{tokens}") elsif result.respond_to?(:content) @logger.info("[ask-agent] LLM call completed — model=#{model} duration=#{elapsed.round(3)}s content_length=#{result.content.to_s.length}") else @logger.info("[ask-agent] LLM call completed — model=#{model} duration=#{elapsed.round(3)}s") end result rescue StandardError => e elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start @logger.warn("[ask-agent] LLM call failed — model=#{model} duration=#{elapsed.round(3)}s error=#{e.class}(#{e.})") raise end end |