Packages
nous
0.15.4
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/entry.ex
defmodule Nous.Memory.Entry do
@moduledoc """
Memory entry struct with scoping fields for flexible isolation.
"""
@type memory_type :: :semantic | :episodic | :procedural
@type t :: %__MODULE__{
id: String.t(),
content: String.t(),
type: memory_type(),
importance: float(),
evergreen: boolean(),
embedding: [float()] | nil,
metadata: map(),
access_count: non_neg_integer(),
agent_id: String.t() | nil,
session_id: String.t() | nil,
user_id: String.t() | nil,
namespace: String.t() | nil,
created_at: DateTime.t(),
updated_at: DateTime.t(),
last_accessed_at: DateTime.t()
}
defstruct [
:id,
:content,
:embedding,
:agent_id,
:session_id,
:user_id,
:namespace,
type: :semantic,
importance: 0.5,
evergreen: false,
metadata: %{},
access_count: 0,
created_at: nil,
updated_at: nil,
last_accessed_at: nil
]
def new(attrs) when is_map(attrs) do
now = DateTime.utc_now()
id = Map.get(attrs, :id) || generate_id()
%__MODULE__{
id: id,
content: Map.fetch!(attrs, :content),
type: Map.get(attrs, :type, :semantic),
importance: Map.get(attrs, :importance, 0.5),
evergreen: Map.get(attrs, :evergreen, false),
embedding: Map.get(attrs, :embedding),
metadata: Map.get(attrs, :metadata, %{}),
access_count: 0,
agent_id: Map.get(attrs, :agent_id),
session_id: Map.get(attrs, :session_id),
user_id: Map.get(attrs, :user_id),
namespace: Map.get(attrs, :namespace),
created_at: Map.get(attrs, :created_at, now),
updated_at: Map.get(attrs, :updated_at, now),
last_accessed_at: Map.get(attrs, :last_accessed_at, now)
}
end
defp generate_id do
:crypto.strong_rand_bytes(16) |> Base.encode16(case: :lower)
end
end