Advisory declaration of what a given model/provider supports, so callers and future capabilities can negotiate gracefully per model — e.g. whether the provider can do native JSON-schema output, forced tool calls, or extended thinking.
Every model returns one via the optional ExAgent.Model.profile/1
callback; providers that don't implement it get a permissive default.
Status: declarative for now. The core loop currently always uses the
:tooloutput mode and doesn't yet downgrade based on these flags. The profile is exposed so external code can branch on it today, and so upcoming work (native/prompted output,Thinkingcapability) can consult it without a new API.
Summary
Types
@type output_mode() :: :text | :tool | :native | :prompted | :auto
@type t() :: %ExAgent.ModelProfile{ default_output_mode: output_mode(), supports_json_object_output: boolean(), supports_json_schema_output: boolean(), supports_thinking: boolean(), supports_tools: boolean() }