Module: ConsoleAgent::SessionLogger

Defined in:
lib/console_agent/session_logger.rb

Class Method Summary collapse

Class Method Details

.log(attrs) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/console_agent/session_logger.rb', line 4

def log(attrs)
  return unless ConsoleAgent.configuration.session_logging
  return unless table_exists?

  record = session_class.create!(
    query:         attrs[:query],
    conversation:  Array(attrs[:conversation]).to_json,
    input_tokens:  attrs[:input_tokens] || 0,
    output_tokens: attrs[:output_tokens] || 0,
    user_name:     current_user_name,
    mode:          attrs[:mode].to_s,
    name:          attrs[:name],
    code_executed: attrs[:code_executed],
    code_output:   attrs[:code_output],
    code_result:   attrs[:code_result],
    console_output: attrs[:console_output],
    executed:      attrs[:executed] || false,
    provider:      ConsoleAgent.configuration.provider.to_s,
    model:         ConsoleAgent.configuration.resolved_model,
    duration_ms:   attrs[:duration_ms],
    created_at:    Time.respond_to?(:current) ? Time.current : Time.now
  )
  record.id
rescue => e
  msg = "ConsoleAgent: session logging failed: #{e.class}: #{e.message}"
  $stderr.puts "\e[33m#{msg}\e[0m" if $stderr.respond_to?(:puts)
  ConsoleAgent.logger.warn(msg)
  nil
end

.update(id, attrs) ⇒ Object



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/console_agent/session_logger.rb', line 34

def update(id, attrs)
  return unless id
  return unless ConsoleAgent.configuration.session_logging
  return unless table_exists?

  updates = {}
  updates[:conversation]  = Array(attrs[:conversation]).to_json if attrs.key?(:conversation)
  updates[:input_tokens]  = attrs[:input_tokens]  if attrs.key?(:input_tokens)
  updates[:output_tokens] = attrs[:output_tokens] if attrs.key?(:output_tokens)
  updates[:code_executed] = attrs[:code_executed]  if attrs.key?(:code_executed)
  updates[:code_output]   = attrs[:code_output]    if attrs.key?(:code_output)
  updates[:code_result]   = attrs[:code_result]    if attrs.key?(:code_result)
  updates[:console_output] = attrs[:console_output] if attrs.key?(:console_output)
  updates[:executed]      = attrs[:executed]       if attrs.key?(:executed)
  updates[:duration_ms]   = attrs[:duration_ms]    if attrs.key?(:duration_ms)
  updates[:name]          = attrs[:name]           if attrs.key?(:name)

  session_class.where(id: id).update_all(updates) unless updates.empty?
rescue => e
  msg = "ConsoleAgent: session update failed: #{e.class}: #{e.message}"
  $stderr.puts "\e[33m#{msg}\e[0m" if $stderr.respond_to?(:puts)
  ConsoleAgent.logger.warn(msg)
  nil
end