ask-token-usage-rails
ActiveRecord persistence for the ask-token-usage wallet engine.
Ships an ActiveRecord store adapter, a has_token_wallet concern, install generator with migrations, and an expiry sweep job.
Installation
# Gemfile
gem "ask-token-usage-rails"
bundle install
rails g ask_token_usage:install
rails db:migrate
Usage
class User < ApplicationRecord
has_token_wallet
end
# Grant tokens
user.grant_tokens!(10_000, reason: :trial, expires_at: 7.days.from_now)
# Spend on an activity (charges only if the block succeeds)
user.spend_tokens_on!(:chat_message, input: "hi", output: "yo") do
LLM.chat(...)
end
# Check balance
user.token_balance # => 9_998
# Use the PORO wallet directly
wallet = user.ask_token_wallet
wallet.entries
wallet.used_since(30.days.ago)
Scheduled jobs
SweepExpiredTokensJob expires grant entries whose expires_at has passed.
# config/recurring.yml (Solid Queue)
ask_token_usage_sweep:
class: Ask::TokenUsage::Rails::SweepExpiredTokensJob
schedule: "every 1 hour"