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
@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
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}
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"}
Returns the Zoi schema for Provider