Packages
nous
0.15.8
0.17.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.17
0.12.16
0.12.15
0.12.14
0.12.13
0.12.12
0.12.11
0.12.9
0.12.7
0.12.6
0.12.5
0.12.3
0.12.2
0.12.0
0.11.3
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.5.0
AI agent framework for Elixir with multi-provider LLM support
Current section
Files
Jump to
Current section
Files
lib/nous/agent_dynamic_supervisor.ex
defmodule Nous.AgentDynamicSupervisor do
@moduledoc "DynamicSupervisor for starting and managing AgentServer processes."
use DynamicSupervisor
def start_link(opts) do
DynamicSupervisor.start_link(__MODULE__, opts, name: __MODULE__)
end
@impl true
def init(_opts) do
# Tuned for multi-tenant blast radius: defaults are max_restarts: 3,
# max_seconds: 5 - 3 crashes in 5s in any one child collapses the
# whole DynamicSupervisor and takes down every other user's agent.
# 100 in 10s is more than generous for a per-user crash loop while
# still tripping if the entire layer is misbehaving.
DynamicSupervisor.init(
strategy: :one_for_one,
max_restarts: 100,
max_seconds: 10
)
end
@doc """
Start an AgentServer under this supervisor, registered in AgentRegistry.
## Options
Accepts all options supported by `Nous.AgentServer.start_link/1`.
"""
def start_agent(session_id, agent_config, opts \\ []) do
child_spec =
{Nous.AgentServer,
Keyword.merge(opts,
session_id: session_id,
agent_config: agent_config,
name: Nous.AgentRegistry.via_tuple(session_id)
)}
DynamicSupervisor.start_child(__MODULE__, child_spec)
end
@doc """
Stop an agent by session ID.
"""
def stop_agent(session_id) do
case Nous.AgentRegistry.lookup(session_id) do
{:ok, pid} -> DynamicSupervisor.terminate_child(__MODULE__, pid)
{:error, _} = err -> err
end
end
@doc """
Find an agent process by session ID.
"""
def find_agent(session_id) do
Nous.AgentRegistry.lookup(session_id)
end
end