Model validation and normalization utilities.
This module provides functions for validating Claude model names, normalizing short forms to full model identifiers, and suggesting similar model names when an invalid model is provided.
Supported Models
"opus"- Claude Opus 4.6 (claude-opus-4-6)"sonnet"- Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)"haiku"- Claude Haiku 4.5 (claude-haiku-4-5-20251001) - default"sonnet[1m]"- Claude Sonnet 4.5 with 1M context (claude-sonnet-4-5-20250929[1m])
Examples
iex> ClaudeAgentSDK.Model.validate("opus")
{:ok, "opus"}
iex> ClaudeAgentSDK.Model.validate("claude-sonnet-4-5-20250929")
{:ok, "claude-sonnet-4-5-20250929"}
iex> ClaudeAgentSDK.Model.validate("invalid")
{:error, :invalid_model}
iex> ClaudeAgentSDK.Model.list_models()
["claude-haiku-4-5-20251001", "claude-opus-4-6", ...]
iex> ClaudeAgentSDK.Model.suggest("opuss")
["opus"]
Summary
Functions
Returns a sorted list of all known model names.
Suggests similar model names for an invalid input.
Validates and normalizes a model name.
Functions
@spec list_models() :: [String.t()]
Returns a sorted list of all known model names.
The list includes both short forms and full model identifiers.
Returns
A sorted list of model name strings.
Examples
iex> models = ClaudeAgentSDK.Model.list_models()
iex> "opus" in models
true
iex> models = ClaudeAgentSDK.Model.list_models()
iex> "claude-opus-4-20250514" in models
true
iex> models = ClaudeAgentSDK.Model.list_models()
iex> models == Enum.sort(models)
true
Suggests similar model names for an invalid input.
Uses Jaro distance algorithm to find models with similarity > 0.7. Returns up to 3 suggestions, sorted by similarity (highest first).
Parameters
invalid_model- The invalid model name to find suggestions for
Returns
A list of up to 3 suggested model names, or an empty list if no similar models are found.
Examples
iex> ClaudeAgentSDK.Model.suggest("opuss")
["opus", "claude-opus-4-20250514"]
iex> ClaudeAgentSDK.Model.suggest("sonet")
["sonnet", "claude-sonnet-4-20250514"]
iex> ClaudeAgentSDK.Model.suggest("completely-unrelated-xyz123")
[]
iex> suggestions = ClaudeAgentSDK.Model.suggest("claude")
iex> length(suggestions) <= 3
true
Validates and normalizes a model name.
Accepts both short forms (e.g., "opus") and full model identifiers (e.g., "claude-opus-4-20250514"). Returns the normalized full model identifier on success.
Parameters
model- The model name to validate (string)
Returns
{:ok, normalized_model}- When the model is valid{:error, :invalid_model}- When the model is not recognized
Examples
iex> ClaudeAgentSDK.Model.validate("opus")
{:ok, "opus"}
iex> ClaudeAgentSDK.Model.validate("sonnet")
{:ok, "sonnet"}
iex> ClaudeAgentSDK.Model.validate("claude-haiku-4-5-20251001")
{:ok, "claude-haiku-4-5-20251001"}
iex> ClaudeAgentSDK.Model.validate("invalid-model")
{:error, :invalid_model}
iex> ClaudeAgentSDK.Model.validate(nil)
{:error, :invalid_model}
iex> ClaudeAgentSDK.Model.validate("")
{:error, :invalid_model}