Module: AI::Stats

Defined in:
lib/stats.rb

Overview

── Stats / cost tracking ────────────────────────────────────────────

Class Method Summary collapse

Class Method Details

.blankObject



6
7
8
# File 'lib/stats.rb', line 6

def blank
  { "interactions" => 0, "tokens_in" => 0, "tokens_out" => 0, "cost" => 0.0 }
end

.cost(usage) ⇒ Object



14
15
16
17
18
# File 'lib/stats.rb', line 14

def cost(usage)
  (usage["prompt_cache_hit_tokens"]  || 0) * RATES[:hit]  +
  (usage["prompt_cache_miss_tokens"] || 0) * RATES[:miss] +
  (usage["completion_tokens"]        || 0) * RATES[:out]
end

.readObject



10
11
12
# File 'lib/stats.rb', line 10

def read
  File.exist?(STATS_FILE) ? (JSON.parse(File.read(STATS_FILE)) rescue blank) : blank
end

.record(usage) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/stats.rb', line 20

def record(usage)
  s = read
  s["interactions"] = s["interactions"].to_i + 1
  if usage
    s["tokens_in"]  = s["tokens_in"].to_i  + (usage["prompt_tokens"]     || 0)
    s["tokens_out"] = s["tokens_out"].to_i + (usage["completion_tokens"] || 0)
    s["cost"]       = s["cost"].to_f       + cost(usage)
  end
  FileUtils.mkdir_p(META_DIR)
  File.write(STATS_FILE, JSON.pretty_generate(s))
end