Spectre.Supervisor (Spectre v0.3.0)

Copy Markdown View Source

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

session_option()

@type session_option() :: Spectre.Session.option()

Functions

child_spec(arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

dismiss(supervisor \\ __MODULE__, pid)

@spec dismiss(GenServer.server(), pid()) :: :ok | {:error, term()}

Stops a supervised Spectre session.

:ok = Spectre.Supervisor.dismiss(MySupervisor, pid)

instance(supervisor \\ __MODULE__, agent, subject, opts \\ [])

Starts or returns the unique Instance for agent + subject.

start_link(opts \\ [])

@spec start_link(keyword()) :: Supervisor.on_start()

Starts the dynamic supervisor for Spectre sessions.

{:ok, pid} = Spectre.Supervisor.start_link(name: MyApp.SpectreSupervisor)

summon(supervisor \\ __MODULE__, agent, opts \\ [])

Starts a supervised Spectre Instance or legacy Session under supervisor.

{:ok, pid} = Spectre.Supervisor.summon(MySupervisor, MyAgent, subject: account.id)