LLMDB.Query (LLM DB v2025.12.4)
View SourceQuery functions for selecting models based on capabilities and requirements.
Provides capability-based model selection with provider preferences. All queries operate on the filtered catalog loaded into the Store.
Summary
Functions
Gets all allowed models matching capability requirements.
Gets capabilities for a model spec.
Selects the first model matching capability requirements.
Types
Functions
Gets all allowed models matching capability requirements.
Returns all models that match the capability filters in preference order.
Similar to select/1 but returns all matches instead of just the first.
Options
:require- Keyword list of required capabilities (e.g.,[tools: true, json_native: true]):forbid- Keyword list of forbidden capabilities:prefer- List of provider atoms in preference order (e.g.,[:openai, :anthropic]):scope- Either:all(default) or a specific provider atom
Returns
List of {provider, model_id} tuples matching the criteria, in preference order.
Examples
candidates = Query.candidates(
require: [chat: true, tools: true],
prefer: [:openai, :anthropic]
)
#=> [{:openai, "gpt-4o"}, {:openai, "gpt-4o-mini"}, {:anthropic, "claude-3-5-sonnet-20241022"}, ...]
candidates = Query.candidates(
require: [json_native: true],
scope: :openai
)
#=> [{:openai, "gpt-4o"}, {:openai, "gpt-4o-mini"}, ...]
@spec capabilities(model_spec()) :: map() | nil
Gets capabilities for a model spec.
Returns capabilities map or nil if model not found.
Parameters
spec- Either{provider, model_id}tuple,"provider:model"string, or%Model{}struct
Examples
caps = Query.capabilities({:openai, "gpt-4o-mini"})
#=> %{chat: true, tools: %{enabled: true, ...}, ...}
caps = Query.capabilities("openai:gpt-4o-mini")
#=> %{chat: true, tools: %{enabled: true, ...}, ...}
{:ok, model} = LLMDB.model("openai:gpt-4o-mini")
caps = Query.capabilities(model)
#=> %{chat: true, tools: %{enabled: true, ...}, ...}
Selects the first model matching capability requirements.
Returns the first allowed model that matches the required capabilities, in provider preference order.
Options
:require- Keyword list of required capabilities (e.g.,[tools: true, json_native: true]):forbid- Keyword list of forbidden capabilities:prefer- List of provider atoms in preference order (e.g.,[:openai, :anthropic]):scope- Either:all(default) or a specific provider atom
Returns
{:ok, {provider, model_id}}- First matching model{:error, :no_match}- No models match the criteria
Examples
{:ok, {provider, model_id}} = Query.select(
require: [chat: true, tools: true],
prefer: [:openai, :anthropic]
)
{:ok, {:openai, model_id}} = Query.select(
require: [json_native: true],
scope: :openai
)