Class: LLM::Tracer::PrettyLogger

Inherits:
Tracer
  • Object
show all
Defined in:
lib/llm/tracer/pretty_logger.rb

Overview

The LLM::Tracer::PrettyLogger class writes human-readable request and tool call logs to a console or file. Each event is a single line with the relevant context inline, no structured JSON.

Examples:

llm = LLM.openai(key: ENV["KEY"])
llm.tracer = LLM::Tracer::PrettyLogger.new(llm)

Writing to a file

llm.tracer = LLM::Tracer::PrettyLogger.new(llm, io: File.open("log.txt", "a"))

Instance Method Summary collapse

Constructor Details

#initialize(provider, options = {}) ⇒ PrettyLogger

Returns a new instance of PrettyLogger.

Parameters:

  • provider (LLM::Provider)

    A provider

  • options (Hash) (defaults to: {})

    A hash of options



19
20
21
22
# File 'lib/llm/tracer/pretty_logger.rb', line 19

def initialize(provider, options = {})
  super
  setup!(**options)
end

Instance Method Details

#on_request_error(ex:) ⇒ void

This method returns an undefined value.

Parameters:



49
50
51
# File 'lib/llm/tracer/pretty_logger.rb', line 49

def on_request_error(ex:, **)
  @io.puts "#{timestamp} #{provider_name} error #{ex.class}: #{ex.message}"
end

#on_request_finish(operation:, res:, model: nil) ⇒ void

This method returns an undefined value.

Parameters:

  • operation (String)
  • res (LLM::Response)
  • span (Object, nil)
  • model (String) (defaults to: nil)
  • outputs (Hash, nil)

    Optional span attributes (e.g. gen_ai.output.messages) from llm.rb or caller.

  • metadata (Hash, nil)

    Optional metadata from llm.rb or caller.



36
37
38
39
40
41
42
43
44
# File 'lib/llm/tracer/pretty_logger.rb', line 36

def on_request_finish(operation:, res:, model: nil, **)
  elapsed = @start ? (Process.clock_gettime(Process::CLOCK_MONOTONIC) - @start).round(2) : nil
  tokens = format_tokens(res)
  name = operation == "chat" ? "chat" : operation
  parts = ["#{timestamp} #{provider_name} #{name} done"]
  parts << tokens if tokens
  parts << "#{elapsed}s" if elapsed
  @io.puts parts.join(", ")
end

#on_request_start(operation:, model: nil) ⇒ void

This method returns an undefined value.

Parameters:

  • operation (String)
  • model (String) (defaults to: nil)
  • inputs (Hash, nil)

    Optional span attributes (e.g. gen_ai.input.messages) from llm.rb or caller.



27
28
29
30
31
# File 'lib/llm/tracer/pretty_logger.rb', line 27

def on_request_start(operation:, model: nil, **)
  @start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  name = operation == "chat" ? "chat" : operation
  @io.puts "#{timestamp} #{provider_name} #{name} (#{model || "default"})"
end

#on_tool_error(ex:) ⇒ void

This method returns an undefined value.

Parameters:

  • ex (Exception)

    The raised error.

  • span (Object, nil)

    The span/context object returned by #on_tool_start.



70
71
72
# File 'lib/llm/tracer/pretty_logger.rb', line 70

def on_tool_error(ex:, **)
  @io.puts "#{timestamp} tool error #{ex.class}: #{ex.message}"
end

#on_tool_finish(result:) ⇒ void

This method returns an undefined value.

Parameters:



63
64
65
# File 'lib/llm/tracer/pretty_logger.rb', line 63

def on_tool_finish(result:, **)
  @io.puts "#{timestamp} #{result.name} -> #{format_value(result.value)}"
end

#on_tool_start(id:, name:, arguments:) ⇒ void

This method returns an undefined value.

Parameters:

  • id (String)

    The tool call ID assigned by the model/provider

  • name (String)

    The tool (function) name.

  • arguments (Hash)

    The parsed tool arguments.

  • model (String)

    The model name



56
57
58
# File 'lib/llm/tracer/pretty_logger.rb', line 56

def on_tool_start(id:, name:, arguments:, **)
  @io.puts "#{timestamp} #{name}(#{format_arguments(arguments)})"
end