Skip to main content

SemanticMemory

Struct SemanticMemory 

Source
pub struct SemanticMemory { /* private fields */ }
Expand description

Long-term semantic memory for storing knowledge facts with vector similarity search.

Each fact is stored as an embedding vector with associated text content. Supports TTL-based expiration and snapshot serialization.

Implementations§

Source§

impl SemanticMemory

Source

pub fn new_from_db( db: Arc<Database>, dimension: usize, ) -> Result<Self, AgentMemoryError>

Creates or opens semantic memory with an independent in-memory TTL.

§Standalone limitation

The MemoryTtl allocated here is not shared with any snapshot mechanism. TTLs assigned at store time (Self::store_with_ttl) are durable: the expiry is persisted as a _veles_expires_at payload field and the in-memory map is rebuilt from payloads at construction, so they survive a restart. TTLs set only in the map (e.g. via AgentMemory::set_semantic_ttl) remain in-memory, and Self::serialize / Self::deserialize carry stored points but intentionally omit the TTL map (see Self::serialize for the full contract). For full TTL and snapshot support, create an AgentMemory instead — it owns the shared MemoryTtl, snapshot manager, and all three subsystems.

§Errors

Returns an error when collection creation/opening fails or dimensions mismatch.

Source

pub fn collection_name(&self) -> &str

Returns the name of the underlying VelesDB collection.

Source

pub fn dimension(&self) -> usize

Returns the embedding dimension for this collection.

Source

pub fn store( &self, id: u64, content: &str, embedding: &[f32], ) -> Result<(), AgentMemoryError>

Stores a semantic memory point.

§Errors

Returns an error when embedding dimension is invalid, collection access fails, or persistence fails.

Source

pub fn store_with_metadata( &self, id: u64, content: &str, embedding: &[f32], metadata: &Map<String, Value>, ) -> Result<(), AgentMemoryError>

Stores a semantic memory point with additional metadata fields.

content always wins: if metadata contains a "content" key, it is overwritten by the content parameter. The reserved system key _veles_expires_at (durable TTL, see Self::store_with_ttl) is likewise stripped from metadata; a plain expires_at key is ordinary business metadata and is stored verbatim.

§Errors

Returns the same errors as Self::store.

Source

pub fn update_metadata( &self, id: u64, updates: &Map<String, Value>, ) -> Result<(), AgentMemoryError>

Updates payload fields of an existing fact without changing its embedding.

Only facts that are tracked and not expired are updated. Any key in updates is merged into the existing payload; content may be updated through this method, but the vector is left untouched. The reserved system key _veles_expires_at (durable TTL) is ignored in updates and preserved from the existing payload.

§Errors

Returns AgentMemoryError::NotFound when the id is unknown or expired. Returns other errors when collection access or persistence fails.

Source

pub fn store_unique( &self, preferred_id: u64, content: &str, embedding: &[f32], ) -> Result<u64, AgentMemoryError>

Stores a fact under preferred_id, or under a freshly allocated id when preferred_id is already taken, and returns the id actually used.

Self::store upserts, so reusing an id silently overwrites the existing fact. Consolidation (which reuses the episodic id as the semantic id) must never clobber an unrelated semantic fact, so it relies on this collision-avoiding path instead.

§Errors

Returns the same errors as Self::store.

Source

pub fn store_with_ttl( &self, id: u64, content: &str, embedding: &[f32], ttl_seconds: u64, ) -> Result<(), AgentMemoryError>

Stores a semantic memory point and assigns a TTL.

A ttl_seconds of 0 means “expire immediately”: rather than persisting a live point that then occupies an index slot until the next auto_expire, the point is eagerly removed (and any pre-existing point for id deleted). The embedding is still dimension-validated so callers get the same error contract as a real store.

The expiry is persisted as a reserved _veles_expires_at (epoch seconds) payload field, so the TTL survives a process restart: the in-memory map is rebuilt from payloads when the collection is reopened.

§Errors

Returns the same errors as Self::store.

Source

pub fn set_ttl_durable( &self, id: u64, ttl_seconds: u64, ) -> Result<(), AgentMemoryError>

Durably sets (or refreshes) the TTL of an existing fact.

Unlike AgentMemory::set_semantic_ttl (in-memory map only, lost on restart), this persists the expiry to the reserved _veles_expires_at payload field, so it survives a restart. A ttl_seconds of 0 expires the fact immediately.

§Errors

Returns NotFound when no fact with id exists, or CollectionError when persistence fails.

Source

pub fn relate( &self, from_id: u64, to_id: u64, rel_type: &str, properties: Option<&Map<String, Value>>, ) -> Result<u64, AgentMemoryError>

Relates two live facts with a typed, durable graph edge (MATCH (a)-[:REL_TYPE]->(b) becomes executable over this memory).

Returns the allocated edge id. Edges are WAL-persisted and cascade away when either endpoint memory is deleted.

§Errors

Returns NotFound when either endpoint is missing or expired, or CollectionError when the edge write fails.

Source

pub fn relations(&self, id: u64) -> Result<Vec<GraphEdge>, AgentMemoryError>

Returns the outgoing relations of a fact (edges it points from).

§Errors

Returns CollectionError when the collection cannot be resolved.

Source

pub fn unrelate(&self, edge_id: u64) -> Result<bool, AgentMemoryError>

Removes a relation edge created by Self::relate.

Returns true when the edge existed and was removed.

§Errors

Returns CollectionError when the collection cannot be resolved.

Source

pub fn query( &self, query_embedding: &[f32], k: usize, ) -> Result<Vec<(u64, f32, String)>, AgentMemoryError>

Queries semantic memory by vector similarity.

§Errors

Returns an error when embedding dimension is invalid, collection access fails, or vector search fails.

Source

pub fn query_filtered( &self, query_embedding: &[f32], k: usize, filter: &Map<String, Value>, offset: usize, ) -> Result<Vec<(u64, f32, String)>, AgentMemoryError>

Queries semantic memory with a payload filter and optional offset pagination.

Results are ranked by vector similarity, filtered against filter (all key-value pairs must match), TTL-expired points are excluded, and offset leading results are skipped before taking k.

The internal fetch budget is generous to survive both TTL eviction and filter miss-rates; when the collection has very few matching entries the returned slice may be shorter than k.

§Errors

Returns an error when embedding dimension is invalid or collection access fails.

Source

pub fn store_batch( &self, facts: &[(u64, &str, &[f32])], ) -> Result<(), AgentMemoryError>

Stores multiple semantic memory points in one batch.

Each tuple is (id, content, embedding). All embeddings are dimension-validated before any write occurs.

This is best-effort, not transactional: if upsert_points fails partway the already-persisted points are kept and stored_ids is left untouched (it is only updated after a fully successful upsert), matching the single-store behaviour.

§Errors

Returns an error when any embedding dimension is invalid, collection access fails, or persistence fails.

Source

pub fn get( &self, id: u64, ) -> Result<Option<(String, Vec<f32>)>, AgentMemoryError>

Retrieves a fact’s content and embedding by id.

Returns None when the id is unknown or has expired.

§Errors

Returns an error when collection access fails.

Source

pub fn list_all(&self) -> Result<Vec<(u64, String)>, AgentMemoryError>

Lists all live (non-expired) tracked facts as (id, content) pairs.

§Errors

Returns an error when collection access fails.

Source

pub fn count(&self) -> usize

Returns the number of tracked facts.

Source

pub fn is_empty(&self) -> bool

Returns true when no facts are tracked.

Source

pub fn clear(&self) -> Result<(), AgentMemoryError>

Removes all facts and their tracking entries.

§Errors

Returns an error when collection access or deletion fails.

Source

pub fn delete(&self, id: u64) -> Result<(), AgentMemoryError>

Deletes a semantic memory point by id.

§Errors

Returns an error when collection access or deletion fails.

Source

pub fn serialize(&self) -> Result<Vec<u8>, AgentMemoryError>

Serializes semantic memory points for snapshot persistence.

§TTL limitation

The returned bytes contain only the stored points (id, embedding, payload — including any durable _veles_expires_at field) and intentionally omit the TTL map. TTL is tracked in a single MemoryTtl map shared across the semantic, episodic, and procedural subsystems (see AgentMemory), so it cannot be partitioned per subsystem here. TTL is persisted and restored globally by AgentMemory::snapshot / restore_state. Calling Self::deserialize in isolation therefore restores facts but refreshes the in-memory expiry map only at the next construction (payload _veles_expires_at rebuild); use the snapshot manager for an immediate full round-trip including TTL.

§Errors

Returns an error when collection access or JSON encoding fails.

Source

pub fn deserialize(&self, data: &[u8]) -> Result<(), AgentMemoryError>

Replaces semantic memory state from snapshot bytes.

§Errors

Returns an error when JSON decoding fails, collection access fails, or persistence operations fail.

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
Source§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
Source§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling Attribute value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
Source§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi Quirk value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
Source§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
Source§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1:

renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the Condition value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more