defmodule AgentSea.ModelPricing do
@moduledoc """
Coarse relative price tiers for models (not exact pricing) — enough for the
auction's `:cheapest` bid and the gateway's cost-optimized routing to prefer
cheaper models. Higher weight = pricier. For precise costs, track usage tokens
against a real pricing table.
"""
@doc "Relative price weight for a model id."
@spec weight(String.t() | nil) :: float()
def weight(model) do
m = String.downcase(model || "")
cond do
contains_any?(m, ["opus", "gpt-5", "o3"]) -> 5.0
contains_any?(m, ["sonnet", "gpt-4"]) -> 3.0
contains_any?(m, ["haiku", "mini", "flash", "llama", "mistral"]) -> 1.0
true -> 3.0
end
end
defp contains_any?(string, substrings),
do: Enum.any?(substrings, &String.contains?(string, &1))
end