Declares model capabilities upfront so adapters serialize correctly on the first attempt — no runtime detection, no retry-on-error branching.
Every model gets a profile. Unknown models get default/0 which assumes
the weakest common denominator (no system role, XML text tool calls).
Summary
Types
@type t() :: %Arcanum.ModelProfile{ max_context: pos_integer(), preserve_reasoning: boolean(), provider_routing: map() | nil, reasoning_field: atom() | nil, supports_system_role: boolean(), supports_tools: boolean(), thinking_param: map() | nil, tool_call_format: tool_call_format() }
@type tool_call_format() :: :native | :xml_text
Functions
@spec capable() :: t()
Profile for models with full OpenAI-compatible capabilities. GPT-4o, Claude via OpenAI proxy, etc.
@spec default() :: t()
Default profile for unknown models. Assumes weak model capabilities. Safe for free-tier / community models that may reject system role and emit tool calls as XML text.