Lux.Memory behaviour (Lux v0.5.0)

View Source

Core memory functionality for Lux agents and components.

There are two ways to use memory:

  1. Named memories (defined as modules): defmodule MyAgentMemory do use Lux.Memory,

     backend: Lux.Memory.ETS,
     name: :my_agent_memory

    end

  2. Dynamic memories: {:ok, memory} = Lux.Memory.initialize(backend: Lux.Memory.ETS)

Summary

Types

backend_module()

@type backend_module() :: module()

memory_entry()

@type memory_entry() :: %{
  id: integer(),
  content: term(),
  type: memory_type(),
  timestamp: integer(),
  metadata: map()
}

memory_opts()

@type memory_opts() :: keyword()

memory_ref()

@type memory_ref() :: term()

memory_type()

@type memory_type() :: :observation | :reflection | :interaction | :system

Callbacks

add(memory_ref, content, type, metadata)

@callback add(memory_ref(), content :: term(), type :: memory_type(), metadata :: map()) ::
  {:ok, memory_entry()} | {:error, term()}

initialize(keyword)

@callback initialize(keyword()) :: {:ok, memory_ref()} | {:error, term()}

recent(memory_ref, n)

@callback recent(memory_ref(), n :: pos_integer()) ::
  {:ok, [memory_entry()]} | {:error, term()}

search(memory_ref, query)

@callback search(memory_ref(), query :: String.t()) ::
  {:ok, [memory_entry()]} | {:error, term()}

window(memory_ref, start_time, end_time)

@callback window(memory_ref(), start_time :: DateTime.t(), end_time :: DateTime.t()) ::
  {:ok, [memory_entry()]} | {:error, term()}

Functions

add(memory_ref, content, type \\ :observation, metadata \\ %{})

initialize(opts)

recent(memory_ref, n)

search(memory_ref, query)

window(memory_ref, start_time, end_time)