Arcanum.ModelProfile (arcanum v0.1.0)

Copy Markdown View Source

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

Functions

Profile for models with full OpenAI-compatible capabilities. GPT-4o, Claude via OpenAI proxy, etc.

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.

Types

t()

@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()
}

tool_call_format()

@type tool_call_format() :: :native | :xml_text

Functions

capable()

@spec capable() :: t()

Profile for models with full OpenAI-compatible capabilities. GPT-4o, Claude via OpenAI proxy, etc.

default()

@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.