Eai. Models
(eai v1.0.5)
Copy Markdown
模型注册表查询接口。
模型定义拆分至 config/models/*.exs,每个文件以 :model_<name> 为 key 注册一项。
新增本地/自托管模型只需新建一个 .exs 文件,无需修改任何中心文件。
默认模型通过 config :eai, :default_model, :atom 指定(见 config/config.exs)。
快速查表
iex> Eai.Models.all() # 全部模型条目
iex> Eai.Models.default() # 默认模型(:default_model 配置项)
iex> Eai.Models.get(:gpt4o) # 按 :name atom 查找
iex> Eai.Models.names() # 所有 name atom 列表
iex> Eai.Models.vision_models() # 标注了 vision: true 的条目
iex> Eai.Models.reload() # 重新扫描 config/models/ 目录本地模型示例
# config/models/my_qwen.exs
import Config
config :eai, :model_qwen,
name: :qwen,
model: "qwen2.5:14b",
url: "http://localhost:11434/v1/chat/completions",
provider: :openai_compat,
api_key_env: nil,
receive_timeout: 180_000
Summary
Functions
Get all registered models from config.
Extract API key from model entry (reads from environment variable).
Get default model (configured in config/config.exs :default_model).
Get first vision-capable model, or nil if none available.
Look up model by :name atom.
Look up model by :name atom. Raises if not found.
Get list of all registered model names (atoms).
Force reload model registry from config/models.exs.
Extract model fields into opts map for LLM.Direct.run/3.
Get all models that support vision (images).
Types
@type model_entry() :: keyword()
Functions
@spec all() :: [model_entry()]
Get all registered models from config.
Loads from :persistent_term cache (set by reload/0).
Returns
List of model entries: `[name: :deepseek, model: "deepseek-v4", url: "...", provider: :openai_compat, ...]`
@spec api_key(model_entry()) :: String.t() | nil
Extract API key from model entry (reads from environment variable).
Returns nil if model needs no authentication (e.g., local Ollama).
Raises if required env var is not set.
Options
entry— Model entry map.
Example
iex> Eai.Models.api_key(Eai.Models.get!(:deepseek))
"sk-xxxxxxxx"
@spec default() :: model_entry()
Get default model (configured in config/config.exs :default_model).
Default is :deepseek.
@spec default_vision() :: model_entry() | nil
Get first vision-capable model, or nil if none available.
Useful for routing image analysis requests.
@spec get(atom() | nil) :: model_entry() | nil
Look up model by :name atom.
Returns nil if not found. nil input returns default model.
Options
name(atom) — Model name::deepseek,:claude_opus, etc.
Example
iex> Eai.Models.get(:claude_opus)
%{name: :claude_opus, model: "claude-opus-4-6", ...}
@spec get!(atom()) :: model_entry()
Look up model by :name atom. Raises if not found.
Options
name(atom) — Model name.
Raises
ArgumentError if model not found.
@spec names() :: [atom()]
Get list of all registered model names (atoms).
Example
iex> Eai.Models.names()
[:deepseek, :claude_opus, :claude_sonnet, :gpt4o, ...]
@spec reload() :: [model_entry()]
Force reload model registry from config/models.exs.
Returns all reloaded model entries.
@spec to_run_opts(model_entry()) :: map()
Extract model fields into opts map for LLM.Direct.run/3.
Internal use; called during Chat.talk processing.
Returns
Map with keys: `:model`, `:url`, `:provider`, `:api_key`, `:receive_timeout`, `:reasoning_effort`,
the 10 Step 7 sampler/超参数 fields (`:temperature`, `:top_p`, `:top_k`, `:min_p`,
`:max_tokens`, `:repetition_penalty`, `:frequency_penalty`, `:presence_penalty`,
`:stop_sequences`, `:seed`), and the Step 9 opt-in field `:anthropic_beta` (a
list of Anthropic beta header strings). Each sampler / opt-in field is included
only when the model config defines a non-nil value; nil at the model config
means "omit" at the adapter (provider default).
@spec vision_models() :: [model_entry()]
Get all models that support vision (images).
Returns
List of model entries where `:vision` is `true`.