pub struct InMemoryVectorStore { /* private fields */ }Expand description
In-process VectorStore backed by a per-namespace Vec<Slot>.
Cloning is cheap — internal state lives behind Arc<RwLock<...>>
so multiple SemanticMemory instances can share one store.
Implementations§
Source§impl InMemoryVectorStore
impl InMemoryVectorStore
Sourcepub fn new(dimension: usize) -> Self
pub fn new(dimension: usize) -> Self
Build an empty store fixed to dimension. Inserts whose
vector.len() differs surface
Error::InvalidRequest at add time.
Sourcepub fn total_slots(&self) -> usize
pub fn total_slots(&self) -> usize
Total slot count across every namespace. Useful for tests.
Trait Implementations§
Source§impl Clone for InMemoryVectorStore
impl Clone for InMemoryVectorStore
Source§impl Debug for InMemoryVectorStore
impl Debug for InMemoryVectorStore
Source§impl VectorStore for InMemoryVectorStore
impl VectorStore for InMemoryVectorStore
Source§fn add<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
document: Document,
vector: Vec<f32>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn add<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
document: Document,
vector: Vec<f32>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Add a document with its pre-computed vector to the index.
Implementations validate
vector.len() == self.dimension().Source§fn search<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
query_vector: &'life3 [f32],
top_k: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Document>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn search<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
query_vector: &'life3 [f32],
top_k: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Document>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Search for the top
top_k nearest documents to query_vector.Source§fn delete<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
doc_id: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn delete<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
doc_id: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Delete a document by its backend-assigned id. Default impl
returns
Error::Config — backends without a stable id space
must override or document the lifecycle.Source§fn update<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
doc_id: &'life3 str,
document: Document,
vector: Vec<f32>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn update<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
doc_id: &'life3 str,
document: Document,
vector: Vec<f32>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Replace an existing document’s vector and metadata. Default
impl chains
delete + add (non-atomic — concurrent
searches observe a gap); backends with atomic-update support
must override.Source§fn search_filtered<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
query_vector: &'life3 [f32],
top_k: usize,
filter: &'life4 VectorFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<Document>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn search_filtered<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
query_vector: &'life3 [f32],
top_k: usize,
filter: &'life4 VectorFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<Document>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Top-K nearest matches with a metadata filter pushed down to
the index. Default impl returns
entelix_core::Error::Config —
silently dropping the filter would return wrong results, so
the trait makes the backend’s lack of filter support
explicit. Backends with filter support must override.Source§fn count<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
filter: Option<&'life3 VectorFilter>,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn count<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
filter: Option<&'life3 VectorFilter>,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Count documents in the namespace, optionally narrowed by a
filter. Used by dashboards reporting per-tenant index sizes
and by memory-budget enforcement (skip indexing when the
namespace is at its cap). Read more
Source§fn list<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
filter: Option<&'life3 VectorFilter>,
limit: usize,
offset: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Document>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn list<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
filter: Option<&'life3 VectorFilter>,
limit: usize,
offset: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Document>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Enumerate documents in the namespace, optionally narrowed by
a filter.
limit caps the page size; offset is the page
start (cursor-style pagination semantics depend on the
backend). Returned documents may omit their vectors — the
method is for inspection / pagination, not for retrieval. Read moreSource§fn add_batch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
items: Vec<(Document, Vec<f32>)>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn add_batch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
ctx: &'life1 ExecutionContext,
ns: &'life2 Namespace,
items: Vec<(Document, Vec<f32>)>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Insert many documents at once. Default impl loops over
add,
polling ExecutionContext::is_cancelled between iterations
so a cancelled caller releases the index lock within one
add round-trip instead of completing the full batch.
Backends that support a native batch endpoint should
override — sequential calls amplify network latency by N.Auto Trait Implementations§
impl Freeze for InMemoryVectorStore
impl !RefUnwindSafe for InMemoryVectorStore
impl Send for InMemoryVectorStore
impl Sync for InMemoryVectorStore
impl Unpin for InMemoryVectorStore
impl UnsafeUnpin for InMemoryVectorStore
impl !UnwindSafe for InMemoryVectorStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more