Class: LlmCostTracker::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/llm_cost_tracker/configuration.rb

Constant Summary collapse

OPENAI_COMPATIBLE_PROVIDERS =
{
  "openrouter.ai" => "openrouter",
  "api.deepseek.com" => "deepseek"
}.freeze
BUDGET_EXCEEDED_BEHAVIORS =
%i[notify raise block_requests].freeze
STORAGE_ERROR_BEHAVIORS =
%i[ignore warn raise].freeze
STORAGE_BACKENDS =
%i[log active_record custom].freeze
UNKNOWN_PRICING_BEHAVIORS =
%i[ignore warn raise].freeze
SHARED_SCALAR_ATTRIBUTES =
%i[
  enabled
  custom_storage
  on_budget_exceeded
  monthly_budget
  daily_budget
  per_call_budget
  log_level
  prices_file
].freeze
SHARED_ENUM_ATTRIBUTES =
{
  storage_backend: [STORAGE_BACKENDS, :log],
  budget_exceeded_behavior: [BUDGET_EXCEEDED_BEHAVIORS, :notify],
  storage_error_behavior: [STORAGE_ERROR_BEHAVIORS, :warn],
  unknown_pricing_behavior: [UNKNOWN_PRICING_BEHAVIORS, :warn]
}.freeze

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/llm_cost_tracker/configuration.rb', line 46

def initialize
  @enabled = true
  self.storage_backend = :log
  @custom_storage     = nil
  @default_tags       = {}
  @on_budget_exceeded = nil
  @monthly_budget     = nil
  @daily_budget       = nil
  @per_call_budget    = nil
  self.budget_exceeded_behavior = :notify
  self.storage_error_behavior = :warn
  self.unknown_pricing_behavior = :warn
  @log_level          = :info
  @prices_file        = nil
  @pricing_overrides  = {}
  @report_tag_breakdowns = []
  self.openai_compatible_providers = OPENAI_COMPATIBLE_PROVIDERS
  @finalized = false
end

Instance Method Details

#active_record?Boolean

Returns:

  • (Boolean)


128
# File 'lib/llm_cost_tracker/configuration.rb', line 128

def active_record? = storage_backend == :active_record

#default_tags=(value) ⇒ Object



66
67
68
69
# File 'lib/llm_cost_tracker/configuration.rb', line 66

def default_tags=(value)
  ensure_shared_configuration_mutable!
  @default_tags = value
end

#dup_for_configurationObject



115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/llm_cost_tracker/configuration.rb', line 115

def dup_for_configuration
  copy = dup
  copy.instance_variable_set(:@default_tags, ValueHelpers.deep_dup(@default_tags || {}))
  copy.instance_variable_set(:@pricing_overrides, ValueHelpers.deep_dup(@pricing_overrides || {}))
  copy.instance_variable_set(:@report_tag_breakdowns, ValueHelpers.deep_dup(@report_tag_breakdowns || []))
  copy.instance_variable_set(
    :@openai_compatible_providers,
    ValueHelpers.deep_dup(@openai_compatible_providers || {})
  )
  copy.instance_variable_set(:@finalized, false)
  copy
end

#finalize!Object



104
105
106
107
108
109
110
111
# File 'lib/llm_cost_tracker/configuration.rb', line 104

def finalize!
  @default_tags = ValueHelpers.deep_freeze(@default_tags || {})
  @pricing_overrides = ValueHelpers.deep_freeze(@pricing_overrides || {})
  @report_tag_breakdowns = ValueHelpers.deep_freeze(Array(@report_tag_breakdowns))
  @openai_compatible_providers = ValueHelpers.deep_freeze(@openai_compatible_providers || {})
  @finalized = true
  self
end

#finalized?Boolean

Returns:

  • (Boolean)


113
# File 'lib/llm_cost_tracker/configuration.rb', line 113

def finalized? = @finalized

#log?Boolean

Returns:

  • (Boolean)


129
# File 'lib/llm_cost_tracker/configuration.rb', line 129

def log? = storage_backend == :log

#normalize_openai_compatible_providers!Object



100
101
102
# File 'lib/llm_cost_tracker/configuration.rb', line 100

def normalize_openai_compatible_providers!
  self.openai_compatible_providers = openai_compatible_providers
end

#openai_compatible_providers=(providers) ⇒ Object



71
72
73
74
# File 'lib/llm_cost_tracker/configuration.rb', line 71

def openai_compatible_providers=(providers)
  ensure_shared_configuration_mutable!
  @openai_compatible_providers = normalize_openai_compatible_providers(providers)
end

#pricing_overrides=(value) ⇒ Object



76
77
78
79
# File 'lib/llm_cost_tracker/configuration.rb', line 76

def pricing_overrides=(value)
  ensure_shared_configuration_mutable!
  @pricing_overrides = value
end

#report_tag_breakdowns=(value) ⇒ Object



81
82
83
84
# File 'lib/llm_cost_tracker/configuration.rb', line 81

def report_tag_breakdowns=(value)
  ensure_shared_configuration_mutable!
  @report_tag_breakdowns = value
end