Module: OpenRouterUsageTracker::Adapter::Base

Included in:
OpenRouterUsageTracker
Defined in:
lib/open_router_usage_tracker/adapter/base.rb

Constant Summary collapse

SUPPORTED_PROVIDERS =
[ "open_ai", "open_router", "google", "anthropic", "x_ai" ].freeze

Instance Method Summary collapse

Instance Method Details

#log(response:, user:, provider: "open_router", store_raw_response: true) ⇒ OpenRouterUsageTracker::UsageLog

Logs an API usage event, creating a UsageLog and updating the DailySummary. This is the primary method for recording usage data.

Examples:

Log a call and store the raw response

OpenRouterUsageTracker.log(response: api_response, user: current_user)

Log a call without storing the raw response

OpenRouterUsageTracker.log(response: api_response, user: current_user, store_raw_response: false)

Parameters:

  • response (Hash)

    The raw response hash from the API provider.

  • user (ApplicationRecord)

    The user object (e.g., User, Account) associated with the API call.

  • provider (String) (defaults to: "open_router")

    The name of the API provider (e.g., ‘open_router’, ‘open_ai’). Defaults to ‘open_router’.

  • store_raw_response (Boolean) (defaults to: true)

    If false, an empty hash will be stored in the raw_usage_response column. Defaults to true.

Returns:



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/open_router_usage_tracker/adapter/base.rb', line 30

def log(response:, user:, provider: "open_router", store_raw_response: true)
  unless SUPPORTED_PROVIDERS.include?(provider)
    raise ArgumentError.new("Unsupported provider: #{provider}. Supported providers are: #{SUPPORTED_PROVIDERS.join(', ')}")
  end

  parser_class = "OpenRouterUsageTracker::Parsers::#{provider.camelize}".constantize
  attributes = parser_class.parse(response)
  attributes[:user] = user
  attributes[:raw_usage_response] = {} unless store_raw_response
  attributes[:provider] = provider

  ApplicationRecord.transaction do
    usage_log = OpenRouterUsageTracker::UsageLog.create!(attributes)
    update_daily_summary(usage_log)
    usage_log
  end
end