Packages
nous
0.12.16
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/persistence.ex
defmodule Nous.Persistence do
@moduledoc ~S"""
Behaviour for pluggable persistence backends.
Implement this behaviour to store and retrieve serialized agent contexts.
See `Nous.Persistence.ETS` for a reference implementation.
## Example
defmodule MyApp.RedisPersistence do
@behaviour Nous.Persistence
@impl true
def save(session_id, data) do
Redix.command(:redix, ["SET", "nous:#{session_id}", Jason.encode!(data)])
:ok
end
@impl true
def load(session_id) do
case Redix.command(:redix, ["GET", "nous:#{session_id}"]) do
{:ok, nil} -> {:error, :not_found}
{:ok, json} -> {:ok, Jason.decode!(json, keys: :atoms)}
end
end
@impl true
def delete(session_id) do
Redix.command(:redix, ["DEL", "nous:#{session_id}"])
:ok
end
@impl true
def list do
{:ok, keys} = Redix.command(:redix, ["KEYS", "nous:*"])
{:ok, Enum.map(keys, &String.replace_prefix(&1, "nous:", ""))}
end
end
"""
@doc "Save serialized context data for a session."
@callback save(session_id :: String.t(), data :: map()) :: :ok | {:error, term()}
@doc "Load serialized context data for a session."
@callback load(session_id :: String.t()) ::
{:ok, map()} | {:error, :not_found} | {:error, term()}
@doc "Delete persisted data for a session."
@callback delete(session_id :: String.t()) :: :ok | {:error, term()}
@doc "List all persisted session IDs."
@callback list() :: {:ok, [String.t()]} | {:error, term()}
end