LLMDB.Provider (LLM DB v2026.9.4)

Copy Markdown View Source

Provider struct with Zoi schema validation.

Represents an LLM provider with metadata including identity, base URL, environment variables, documentation, and pricing defaults.

Fields

  • :id - Unique provider identifier atom (e.g., :openai)
  • :name - Display name
  • :base_url - Base API URL (supports template variables like {region})
  • :env - List of environment variable names for credentials
  • :config_schema - Runtime configuration field definitions
  • :doc - Documentation URL
  • :pricing_defaults - Default pricing components applied to all models (see below)
  • :exclude_models - Model IDs to exclude from upstream sources
  • :extra - Additional provider-specific data; snapshot JSON keys remain strings
  • :alias_of - Primary provider ID if this is an alias

Model ID Prefixes

Set extra.model_id_prefixes to declare prefixes for model lookup. For example, %{extra: %{model_id_prefixes: ["tenant.", "tenant.eu."]}} enables exact prefixed entries, aliases, and base model fallback for that provider. The longest matching prefix is used. Base aliases and fallbacks retain the prefix in the resolved ID. If that resolved ID names a prefixed entry, its metadata and pricing are used.

Providers without prefix rules use ordinary model and alias lookup. Bedrock has compatibility defaults for existing catalogs. An explicit empty list disables them.

Pricing Defaults

The :pricing_defaults field defines default pricing for tools and features that apply to all models from this provider. This avoids duplicating tool pricing across every model definition.

%{
  currency: "USD",
  components: [
    %{id: "tool.web_search", kind: "tool", tool: "web_search", unit: "call", per: 1000, rate: 10.0},
    %{id: "storage.vectors", kind: "storage", unit: "gb_day", per: 1, rate: 0.10}
  ]
}

Provider defaults are merged with model-specific pricing at load time. See LLMDB.Pricing and the Pricing and Billing guide.

Summary

Functions

Creates a new Provider struct from a map, validating with Zoi schema.

Creates a new Provider struct from a map, raising on validation errors.

Returns the Zoi schema for Provider

Types

t()

@type t() :: %LLMDB.Provider{
  alias_of: nil | nil | atom(),
  base_url: nil | nil | binary(),
  catalog_only: boolean(),
  config_schema:
    nil
    | nil
    | [
        %{
          optional(:default) => nil | any(),
          :name => binary(),
          :type => binary(),
          optional(:doc) => nil | binary(),
          required: boolean()
        }
      ],
  doc: nil | nil | binary(),
  env: nil | nil | [binary()],
  exclude_models: nil | nil | [binary()],
  extra: nil | nil | map(),
  id: atom(),
  name: nil | nil | binary(),
  pricing_defaults:
    nil
    | nil
    | %{
        optional(:currency) => nil | binary(),
        components: [
          %{
            :id => binary(),
            optional(:unit) => nil | binary(),
            optional(:mode) => nil | binary(),
            optional(:source) => nil | binary(),
            optional(:kind) => nil | binary(),
            optional(:tool) => nil | atom() | binary(),
            optional(:notes) => nil | binary(),
            optional(:applies_to) => nil | [binary()],
            optional(:applies_when) => nil | map(),
            optional(:charge_scope) => nil | binary(),
            optional(:derives_from) => nil | binary(),
            optional(:excludes_when) => nil | map(),
            optional(:meter) => nil | binary(),
            optional(:multiplier) => nil | number(),
            optional(:per) => nil | integer(),
            optional(:rate) => nil | number(),
            optional(:size_class) => nil | binary()
          }
        ]
      },
  runtime:
    nil
    | nil
    | %{
        optional(:auth) =>
          nil
          | %{
              :env => [binary()],
              optional(:type) => nil | binary(),
              :headers => [
                %{
                  optional(:env) => nil | binary(),
                  :name => binary(),
                  optional(:value) => nil | binary()
                }
              ],
              optional(:header_name) => nil | binary(),
              optional(:query_name) => nil | binary()
            },
        optional(:execution) =>
          nil
          | %{
              optional(:text) => nil | binary(),
              optional(:image) => nil | binary(),
              optional(:embed) => nil | binary(),
              optional(:object) => nil | binary(),
              optional(:evaluate) => nil | binary(),
              optional(:transcription) => nil | binary(),
              optional(:speech) => nil | binary(),
              optional(:realtime) => nil | binary()
            },
        optional(:doc_url) => nil | binary(),
        optional(:base_url) => nil | binary(),
        :default_headers => map(),
        :default_query => map(),
        optional(:config_schema) =>
          nil
          | [
              %{
                optional(:default) => nil | any(),
                :name => binary(),
                :type => binary(),
                optional(:doc) => nil | binary(),
                required: boolean()
              }
            ]
      }
}

Functions

new(attrs)

@spec new(map()) :: {:ok, t()} | {:error, term()}

Creates a new Provider struct from a map, validating with Zoi schema.

Examples

iex> LLMDB.Provider.new(%{id: :openai, name: "OpenAI"})
{:ok, %LLMDB.Provider{id: :openai, name: "OpenAI"}}

iex> LLMDB.Provider.new(%{})
{:error, _validation_errors}

new!(attrs)

@spec new!(map()) :: t()

Creates a new Provider struct from a map, raising on validation errors.

Examples

iex> LLMDB.Provider.new!(%{id: :openai, name: "OpenAI"})
%LLMDB.Provider{id: :openai, name: "OpenAI"}

schema()

Returns the Zoi schema for Provider