Module: ConsoleAgent::SessionLogger

Defined in:
lib/console_agent/session_logger.rb

Class Method Summary collapse

Class Method Details

.find_by_slack_thread(thread_ts) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/console_agent/session_logger.rb', line 36

def find_by_slack_thread(thread_ts)
  return nil unless ConsoleAgent.configuration.session_logging
  return nil unless table_exists?
  session_class.where(slack_thread_ts: thread_ts).order(created_at: :desc).first
rescue => e
  ConsoleAgent.logger.warn("ConsoleAgent: session lookup failed: #{e.class}: #{e.message}")
  nil
end

.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
33
34
# File 'lib/console_agent/session_logger.rb', line 4

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

  create_attrs = {
    query:         attrs[:query],
    conversation:  Array(attrs[:conversation]).to_json,
    input_tokens:  attrs[:input_tokens] || 0,
    output_tokens: attrs[:output_tokens] || 0,
    user_name:     attrs[: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
  }
  create_attrs[:slack_thread_ts] = attrs[:slack_thread_ts] if attrs[:slack_thread_ts]
  record = session_class.create!(create_attrs)
  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



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/console_agent/session_logger.rb', line 45

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