Module: RubyLLM::Agents::Execution::Metrics
- Extended by:
- ActiveSupport::Concern
- Included in:
- RubyLLM::Agents::Execution
- Defined in:
- app/models/ruby_llm/agents/execution/metrics.rb
Overview
Metrics concern for cost calculations and performance metrics
Provides instance methods for calculating costs from token usage, formatting durations, and computing performance metrics.
Cost Display Helpers collapse
-
#formatted_input_cost ⇒ String?
Returns input_cost formatted as currency.
-
#formatted_output_cost ⇒ String?
Returns output_cost formatted as currency.
-
#formatted_total_cost ⇒ String?
Returns total_cost formatted as currency.
Instance Method Summary collapse
-
#calculate_costs!(model_info = nil) ⇒ void
Calculates and sets input/output costs from token usage.
-
#cost_per_1k_tokens ⇒ Float?
Calculates cost efficiency as cost per 1,000 tokens.
-
#duration_seconds ⇒ Float?
Returns execution duration in seconds.
-
#tokens_per_second ⇒ Float?
Calculates throughput as tokens processed per second.
Instance Method Details
#calculate_costs!(model_info = nil) ⇒ void
Requires input_tokens and output_tokens to be set
This method returns an undefined value.
Calculates and sets input/output costs from token usage
Uses RubyLLM’s built-in pricing data to calculate costs. Sets input_cost and output_cost attributes (total_cost is calculated by callback).
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'app/models/ruby_llm/agents/execution/metrics.rb', line 24 def calculate_costs!(model_info = nil) return unless input_tokens && output_tokens model_info ||= resolve_model_info return unless model_info # Get pricing from RubyLLM (prices per million tokens in dollars) input_price_per_million = model_info.pricing&.text_tokens&.input || 0 output_price_per_million = model_info.pricing&.text_tokens&.output || 0 # Calculate costs in dollars (with 6 decimal precision for micro-dollars) self.input_cost = ((input_tokens / 1_000_000.0) * input_price_per_million).round(6) self.output_cost = ((output_tokens / 1_000_000.0) * output_price_per_million).round(6) end |
#cost_per_1k_tokens ⇒ Float?
Calculates cost efficiency as cost per 1,000 tokens
Useful for comparing cost efficiency across different models.
59 60 61 62 |
# File 'app/models/ruby_llm/agents/execution/metrics.rb', line 59 def cost_per_1k_tokens return nil unless total_tokens && total_tokens > 0 && total_cost (total_cost / total_tokens.to_f * 1000).round(6) end |
#duration_seconds ⇒ Float?
Returns execution duration in seconds
42 43 44 |
# File 'app/models/ruby_llm/agents/execution/metrics.rb', line 42 def duration_seconds duration_ms ? (duration_ms / 1000.0).round(2) : nil end |
#formatted_input_cost ⇒ String?
Returns input_cost formatted as currency
69 70 71 |
# File 'app/models/ruby_llm/agents/execution/metrics.rb', line 69 def formatted_input_cost format_cost(input_cost) end |
#formatted_output_cost ⇒ String?
Returns output_cost formatted as currency
76 77 78 |
# File 'app/models/ruby_llm/agents/execution/metrics.rb', line 76 def formatted_output_cost format_cost(output_cost) end |
#formatted_total_cost ⇒ String?
Returns total_cost formatted as currency
83 84 85 |
# File 'app/models/ruby_llm/agents/execution/metrics.rb', line 83 def formatted_total_cost format_cost(total_cost) end |
#tokens_per_second ⇒ Float?
Calculates throughput as tokens processed per second
49 50 51 52 |
# File 'app/models/ruby_llm/agents/execution/metrics.rb', line 49 def tokens_per_second return nil unless duration_ms && duration_ms > 0 && total_tokens (total_tokens / duration_seconds.to_f).round(2) end |