Module: AI::Stats
- Defined in:
- lib/stats.rb
Overview
── Stats / cost tracking ────────────────────────────────────────────
Class Method Summary collapse
Class Method Details
.blank ⇒ Object
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 |
.read ⇒ Object
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 |