Skip to main content

EpisodicMemorySchema

Struct EpisodicMemorySchema 

Source
pub struct EpisodicMemorySchema;
Expand description

Marker struct for episodic agent memory tables (Phase 9). Actual schema is enforced by column names in episodic_columns module.

An episodic memory table extends LlmContextSchema with recency and importance signals, enabling hybrid scoring during recall:

-- From llm_columns::* (required baseline)
chunk_id:          Utf8
chunk_text:        Utf8
embedding:         FixedSizeBinary(N)  -- F16, cosine

-- From episodic_columns::* (Phase 9 extensions)
agent_id:          Utf8       -- UUID string
session_id:        Utf8       -- UUID string
created_at:        Timestamp(ns, UTC)  -- use ailake_core::now_ns()
recency_weight:    Float32    -- exp(-λ * days_since_access), updated by MemoryDecayJob
access_count:      UInt32     -- incremented on each recall() hit
last_accessed_at:  Timestamp(ns, UTC)  -- updated on recall, use ailake_core::now_ns()
importance_score:  Float32    -- agent-assigned [0.0, 1.0]

Hybrid scoring: after HNSW retrieval, re-rank results by hybrid_score(distance, recency_weight, importance_score). Memories that are semantically similar AND recently accessed AND flagged important rank highest.

Recommended setup:

  • One HNSW over embedding (text, cosine, dim=1536).
  • Partition by agent_id via VectorStoragePolicy hidden partitioning.
  • Run MemoryDecayJob daily to update recency_weight via compaction.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.