Module: RubyLLM::Agents::ImageGenerator::Pricing

Extended by:
Pricing
Included in:
Pricing
Defined in:
lib/ruby_llm/agents/image/generator/pricing.rb

Overview

Dynamic pricing resolution for image generation models.

Uses a three-tier strategy (no hardcoded prices):

  1. Configurable pricing table - user overrides

  2. RubyLLM gem (local, no HTTP) - model registry pricing

  3. LiteLLM (via shared DataStore) - comprehensive, community-maintained

When no pricing is found, returns 0 to signal unknown cost.

Examples:

Get price for a model

Pricing.cost_per_image("gpt-image-1", size: "1024x1024", quality: "hd")
# => 0.08

Calculate total cost

Pricing.calculate_cost(model_id: "dall-e-3", size: "1024x1024", count: 4)
# => 0.16

Instance Method Summary collapse

Instance Method Details

#all_pricingHash

Expose all known pricing for debugging/console inspection

Returns:

  • (Hash)

    Merged pricing from all sources



78
79
80
81
82
83
# File 'lib/ruby_llm/agents/image/generator/pricing.rb', line 78

def all_pricing
  {
    litellm: litellm_image_models,
    configured: config.image_model_pricing || {}
  }
end

#calculate_cost(model_id:, size: nil, quality: nil, count: 1) ⇒ Float

Calculate total cost for image generation

Parameters:

  • model_id (String)

    The model identifier

  • size (String) (defaults to: nil)

    Image size (e.g., “1024x1024”)

  • quality (String) (defaults to: nil)

    Quality setting (“standard”, “hd”)

  • count (Integer) (defaults to: 1)

    Number of images

Returns:

  • (Float)

    Total cost in USD



37
38
39
40
# File 'lib/ruby_llm/agents/image/generator/pricing.rb', line 37

def calculate_cost(model_id:, size: nil, quality: nil, count: 1)
  cost = cost_per_image(model_id, size: size, quality: quality)
  (cost * count).round(6)
end

#cost_per_image(model_id, size: nil, quality: nil) ⇒ Float

Get cost for a single image

Parameters:

  • model_id (String)

    The model identifier

  • size (String) (defaults to: nil)

    Image size

  • quality (String) (defaults to: nil)

    Quality setting

Returns:

  • (Float)

    Cost per image in USD (0 if unknown)



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/ruby_llm/agents/image/generator/pricing.rb', line 48

def cost_per_image(model_id, size: nil, quality: nil)
  # Tier 1: User-configurable pricing table
  if (config_price = from_config(model_id, size, quality))
    return config_price
  end

  # Tier 2: RubyLLM gem (local, no HTTP)
  if (ruby_llm_price = from_ruby_llm(model_id))
    return ruby_llm_price
  end

  # Tier 3: LiteLLM (via shared DataStore + adapter)
  if (litellm_price = from_litellm(model_id, size, quality))
    return litellm_price
  end

  # No pricing found — return user-configured default or 0
  config.default_image_cost || 0
end

#refresh!void

This method returns an undefined value.

Refresh pricing data



71
72
73
# File 'lib/ruby_llm/agents/image/generator/pricing.rb', line 71

def refresh!
  Agents::Pricing::DataStore.refresh!
end