Reusable bundle of runtime/execution options for council members.
A Profile captures the capability stack — provider, model, sampling, tools, retry — separately from the Member, which captures identity (role, system prompt, output schema). The same Member can run on any Profile; the same Profile can dress any Member.
Defining a profile
defmodule MyApp.Profiles.WebHeavy do
use CouncilEx.Profile
provider :openai
model "gpt-4o"
temperature 0.3
max_tokens 4000
tools [MyApp.Tools.WebFetch, MyApp.Tools.WebSearch]
endUsing in a council
defmodule MyApp.PaperCouncil do
use CouncilEx
default_profile MyApp.Profiles.WebHeavy
member :alice, MyApp.Members.Researcher
member :bob, MyApp.Members.Researcher, profile: MyApp.Profiles.LocalCheap
member :judge, MyApp.Members.Critic, temperature: 0.0
endResolution order
Final member opts =
profile.opts()
|> Keyword.merge(council member-line opts)Profile resolution per member:
:profilekey on the member line, if presentdefault_profile/1on the council, if declared:default_profileinconfig :council_ex, ..., if set- nil — member must supply
:providerand:modelitself
Inline ad-hoc opts on the member line always win over the resolved profile.
Summary
Functions
Resolve final opts for a member, merging the chosen profile (if any) with the inline opts declared on the council member line.
Functions
Resolve final opts for a member, merging the chosen profile (if any) with the inline opts declared on the council member line.
Resolution order: inline :profile > council default > app config default.
Inline opts always override profile values.