Class: LanguageOperator::Agent::MetricsTracker
- Inherits:
-
Object
- Object
- LanguageOperator::Agent::MetricsTracker
- Defined in:
- lib/language_operator/agent/metrics_tracker.rb
Instance Attribute Summary collapse
-
#metrics ⇒ Object
readonly
Returns the value of attribute metrics.
Instance Method Summary collapse
-
#cumulative_stats ⇒ Hash
Get cumulative statistics.
-
#initialize ⇒ MetricsTracker
constructor
A new instance of MetricsTracker.
-
#recent_requests(limit = 10) ⇒ Array<Hash>
Get recent request history.
-
#record_request(response, model_id) ⇒ Object
Record token usage from an LLM response.
-
#reset! ⇒ Object
Reset all metrics (for testing).
Constructor Details
#initialize ⇒ MetricsTracker
Returns a new instance of MetricsTracker.
8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/language_operator/agent/metrics_tracker.rb', line 8 def initialize @mutex = Mutex.new @metrics = { total_input_tokens: 0, total_output_tokens: 0, total_cached_tokens: 0, total_cache_creation_tokens: 0, request_count: 0, total_cost: 0.0, requests: [] } @pricing_cache = {} end |
Instance Attribute Details
#metrics ⇒ Object (readonly)
Returns the value of attribute metrics.
6 7 8 |
# File 'lib/language_operator/agent/metrics_tracker.rb', line 6 def metrics @metrics end |
Instance Method Details
#cumulative_stats ⇒ Hash
Get cumulative statistics
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/language_operator/agent/metrics_tracker.rb', line 62 def cumulative_stats @mutex.synchronize do { totalTokens: @metrics[:total_input_tokens] + @metrics[:total_output_tokens], inputTokens: @metrics[:total_input_tokens], outputTokens: @metrics[:total_output_tokens], cachedTokens: @metrics[:total_cached_tokens], cacheCreationTokens: @metrics[:total_cache_creation_tokens], requestCount: @metrics[:request_count], estimatedCost: @metrics[:total_cost].round(6) } end end |
#recent_requests(limit = 10) ⇒ Array<Hash>
Get recent request history
79 80 81 82 83 |
# File 'lib/language_operator/agent/metrics_tracker.rb', line 79 def recent_requests(limit = 10) @mutex.synchronize do @metrics[:requests].last(limit) end end |
#record_request(response, model_id) ⇒ Object
Record token usage from an LLM response
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/language_operator/agent/metrics_tracker.rb', line 25 def record_request(response, model_id) return unless response @mutex.synchronize do # Extract token counts with defensive checks input_tokens = extract_token_count(response, :input_tokens) output_tokens = extract_token_count(response, :output_tokens) cached_tokens = extract_token_count(response, :cached_tokens) cache_creation_tokens = extract_token_count(response, :cache_creation_tokens) # Calculate cost for this request cost = calculate_cost(input_tokens, output_tokens, model_id) # Update cumulative metrics @metrics[:total_input_tokens] += input_tokens @metrics[:total_output_tokens] += output_tokens @metrics[:total_cached_tokens] += cached_tokens @metrics[:total_cache_creation_tokens] += cache_creation_tokens @metrics[:request_count] += 1 @metrics[:total_cost] += cost # Store per-request history (limited to last 100 requests) @metrics[:requests] << { timestamp: Time.now.iso8601, model: model_id, input_tokens: input_tokens, output_tokens: output_tokens, cached_tokens: cached_tokens, cache_creation_tokens: cache_creation_tokens, cost: cost.round(6) } @metrics[:requests].shift if @metrics[:requests].size > 100 end end |
#reset! ⇒ Object
Reset all metrics (for testing)
86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/language_operator/agent/metrics_tracker.rb', line 86 def reset! @mutex.synchronize do @metrics = { total_input_tokens: 0, total_output_tokens: 0, total_cached_tokens: 0, total_cache_creation_tokens: 0, request_count: 0, total_cost: 0.0, requests: [] } @pricing_cache = {} end end |