Fuzzy model resolution with model:effort shorthand.
Resolution order:
- Exact
provider:model_idmatch - LLMDB catalog search by substring
model:effortshorthand — split on last colon, resolve model, parse effort
Examples:
resolve("anthropic:claude-sonnet-4") → {:ok, "anthropic:claude-sonnet-4", nil}
resolve("claude-sonnet") → {:ok, "anthropic:claude-sonnet-4-...", nil}
resolve("claude-sonnet:high") → {:ok, "anthropic:claude-sonnet-4-...", :high}
resolve("sonnet") → {:ok, "anthropic:claude-sonnet-4-...", nil}
Summary
Types
@type result() :: {:ok, String.t(), Vibe.Model.Effort.t() | nil} | {:error, :not_found}