Dynamic supervisor for Spectre Sessions and Agent Instances.
Add it to your application supervision tree:
children = [
{Spectre.Supervisor, name: MyApp.SpectreSupervisor}
]Then start a subject-scoped Agent Instance:
{:ok, pid} =
Spectre.Supervisor.summon(
MyApp.SpectreSupervisor,
MyApp.Agents.ProjectAgent,
subject: account.id,
opts: [model: &MyApp.LLM.complete/2]
)Calls without :subject retain the legacy conversation-scoped
Spectre.Session behaviour.
Summary
Functions
Returns a specification to start this module under a supervisor.
Stops a supervised Spectre session.
Starts or returns the unique Instance for agent + subject.
Starts the dynamic supervisor for Spectre sessions.
Starts a supervised Spectre Instance or legacy Session under supervisor.
Types
@type session_option() :: Spectre.Session.option()
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec dismiss(GenServer.server(), pid()) :: :ok | {:error, term()}
Stops a supervised Spectre session.
:ok = Spectre.Supervisor.dismiss(MySupervisor, pid)
@spec instance( GenServer.server(), module() | Spectre.AgentRef.t(), Spectre.Subject.t() | term(), keyword() ) :: DynamicSupervisor.on_start_child()
Starts or returns the unique Instance for agent + subject.
@spec start_link(keyword()) :: Supervisor.on_start()
Starts the dynamic supervisor for Spectre sessions.
{:ok, pid} = Spectre.Supervisor.start_link(name: MyApp.SpectreSupervisor)
@spec summon(GenServer.server(), module(), [ session_option() | Spectre.Instance.option() ]) :: DynamicSupervisor.on_start_child()
Starts a supervised Spectre Instance or legacy Session under supervisor.
{:ok, pid} = Spectre.Supervisor.summon(MySupervisor, MyAgent, subject: account.id)