Agentic.LLM.Model (agentic v0.2.2)

Copy Markdown

Shared struct describing a single LLM model.

Providers populate default_models/0 with these. The Agentic.LLM.Catalog GenServer merges static, discovered, and user-overridden model lists.

Fields:

  • :id — provider-local model id (e.g. "claude-opus-4-20250514").
  • :provider — atom id of the provider module (e.g. :anthropic).
  • :label — human-readable label for UI.
  • :context_window — input token budget.
  • :max_output_tokens — generation budget.
  • :cost — map %{input: ..., output: ..., cache_read: ..., cache_write: ...} with prices in USD per 1M tokens.
  • :capabilitiesMapSet of capability tags (:chat, :tools, :vision, :embeddings, :reasoning, :prompt_caching, :json_mode, :free, …).
  • :tier_hint — provider-suggested tier (:primary, :lightweight, or nil).
  • :source — where the entry came from (:static, :discovered, :user_config).

Summary

Types

capability()

@type capability() :: atom()

cost()

@type cost() :: %{
  :input => float(),
  :output => float(),
  optional(:cache_read) => float(),
  optional(:cache_write) => float()
}

t()

@type t() :: %Agentic.LLM.Model{
  capabilities: MapSet.t(),
  context_window: pos_integer() | nil,
  cost: cost() | nil,
  id: String.t(),
  label: String.t() | nil,
  max_output_tokens: pos_integer() | nil,
  provider: atom(),
  source: :static | :discovered | :user_config,
  tier_hint: :primary | :lightweight | nil
}