Packages
nous
0.15.2
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/memory/scope.ex
defmodule Nous.Memory.Scope do
@moduledoc """
Shared scope-building logic for memory operations.
Both `Nous.Plugins.Memory` and `Nous.Memory.Tools` need to resolve a scope
from config. This module extracts that common pattern.
"""
@doc """
Build a scope map from config based on the `:default_search_scope` setting.
Returns `:global` or a map of scoping fields extracted from `config`.
"""
@spec build(map()) :: :global | map()
def build(config) do
case config[:default_search_scope] do
:global -> :global
:session -> from_fields(config, [:agent_id, :session_id, :user_id])
:user -> from_fields(config, [:user_id])
_agent_or_default -> from_fields(config, [:agent_id, :user_id])
end
end
@doc """
Build a scope map from specific fields in config.
Returns `:global` if no fields have values.
"""
@spec from_fields(map(), [atom()]) :: :global | map()
def from_fields(config, fields) do
fields
|> Enum.reduce(%{}, fn field, acc ->
case Map.get(config, field) do
nil -> acc
value -> Map.put(acc, field, value)
end
end)
|> case do
empty when map_size(empty) == 0 -> :global
scope -> scope
end
end
end