xz-memory-engine 0.2.0

Reusable engine implementations for xz-memory-core: storage backends and layered memory
Documentation
//! Vector store wrapper (feature-gated behind `vector-memory`).

#[cfg(feature = "vector-memory")]
use std::sync::Arc;

#[cfg(feature = "vector-memory")]
use xz_memory_core::StoreError;

/// Vector store configuration and lifecycle.
#[cfg(feature = "vector-memory")]
pub struct VectorStore {
    inner: Arc<dyn xz_embed::traits::VectorStore>,
}

#[cfg(feature = "vector-memory")]
impl VectorStore {
    /// Wrap an existing vector store.
    pub fn new(inner: Arc<dyn xz_embed::traits::VectorStore>) -> Self {
        Self { inner }
    }

    /// Store a vector entry.
    pub async fn store(
        &self,
        entry: xz_memory_core::types::vector::VectorEntry,
    ) -> Result<(), StoreError> {
        self.inner.insert(entry).await.map_err(|e| StoreError::Backend(e.to_string()))
    }

    /// Search vectors by similarity.
    pub async fn search(
        &self,
        query: &[f32],
        limit: usize,
        threshold: f32,
    ) -> Result<Vec<xz_memory_core::types::vector::SearchResult>, StoreError> {
        let mut results = self
            .inner
            .search(query, limit)
            .await
            .map_err(|e| StoreError::Backend(e.to_string()))?;

        results.retain(|r| r.score >= threshold);
        Ok(results)
    }

    /// Delete a vector entry.
    pub async fn delete(&self, id: &str) -> Result<(), StoreError> {
        self.inner
            .delete(&[id.to_string()])
            .await
            .map_err(|e| StoreError::Backend(e.to_string()))?;
        Ok(())
    }
}