Module: Woods::CostModel::ProviderPricing

Defined in:
lib/woods/cost_model/provider_pricing.rb

Overview

Frozen pricing data for embedding providers.

Costs are expressed as dollars per 1 million tokens, sourced from BACKEND_MATRIX.md. Each provider is identified by a Symbol key.

Examples:

ProviderPricing.cost_per_million(:openai_small) # => 0.02
ProviderPricing.providers                        # => [:openai_small, ...]

Constant Summary collapse

COSTS_PER_MILLION_TOKENS =

Cost per 1 million tokens, in USD.

Returns:

  • (Hash{Symbol => Float})
{
  openai_small: 0.02,
  openai_large: 0.13,
  voyage_code3: 0.06,
  ollama: 0.00
}.freeze
DEFAULT_DIMENSIONS =

Default embedding dimensions per provider.

Returns:

  • (Hash{Symbol => Integer})
{
  openai_small: 1536,
  openai_large: 3072,
  voyage_code3: 1024,
  ollama: 768
}.freeze

Class Method Summary collapse

Class Method Details

.cost_per_million(provider) ⇒ Float

Look up the cost per 1M tokens for a provider.

Parameters:

  • provider (Symbol)

    Provider key (e.g. :openai_small)

Returns:

  • (Float)

    Cost in USD per 1M tokens

Raises:

  • (ArgumentError)

    if provider is unknown



40
41
42
43
44
45
# File 'lib/woods/cost_model/provider_pricing.rb', line 40

def self.cost_per_million(provider)
  COSTS_PER_MILLION_TOKENS.fetch(provider) do
    raise ArgumentError, "Unknown embedding provider: #{provider.inspect}. " \
                         "Valid providers: #{providers.join(', ')}"
  end
end

.default_dimensions(provider) ⇒ Integer

Look up the default dimensions for a provider.

Parameters:

  • provider (Symbol)

    Provider key

Returns:

  • (Integer)

    Default embedding dimensions

Raises:

  • (ArgumentError)

    if provider is unknown



52
53
54
55
56
57
# File 'lib/woods/cost_model/provider_pricing.rb', line 52

def self.default_dimensions(provider)
  DEFAULT_DIMENSIONS.fetch(provider) do
    raise ArgumentError, "Unknown embedding provider: #{provider.inspect}. " \
                         "Valid providers: #{providers.join(', ')}"
  end
end

.providersArray<Symbol>

List all known provider keys.

Returns:

  • (Array<Symbol>)


62
63
64
# File 'lib/woods/cost_model/provider_pricing.rb', line 62

def self.providers
  COSTS_PER_MILLION_TOKENS.keys
end