Skip to main content

VectorDatabase

Trait VectorDatabase 

Source
pub trait VectorDatabase: Send + Sync {
    // Required methods
    fn initialize<'life0, 'async_trait>(
        &'life0 self,
        dimension: usize,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn store_embeddings<'life0, 'life1, 'async_trait>(
        &'life0 self,
        embeddings: Vec<Vec<f32>>,
        metadata: Vec<ChunkMetadata>,
        contents: Vec<String>,
        root_path: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn search<'life0, 'life1, 'async_trait>(
        &'life0 self,
        query_vector: Vec<f32>,
        query_text: &'life1 str,
        limit: usize,
        min_score: f32,
        project: Option<String>,
        root_path: Option<String>,
        hybrid: bool,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<SearchResult>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn search_filtered<'life0, 'life1, 'async_trait>(
        &'life0 self,
        query_vector: Vec<f32>,
        query_text: &'life1 str,
        limit: usize,
        min_score: f32,
        project: Option<String>,
        root_path: Option<String>,
        hybrid: bool,
        file_extensions: Vec<String>,
        languages: Vec<String>,
        path_patterns: Vec<String>,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<SearchResult>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn delete_by_file<'life0, 'life1, 'async_trait>(
        &'life0 self,
        file_path: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn clear<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn get_statistics<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = Result<DatabaseStats>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn flush<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn count_by_root_path<'life0, 'life1, 'async_trait>(
        &'life0 self,
        root_path: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn get_indexed_files<'life0, 'life1, 'async_trait>(
        &'life0 self,
        root_path: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;

    // Provided method
    fn search_with_embeddings<'life0, 'life1, 'async_trait>(
        &'life0 self,
        query_vector: Vec<f32>,
        query_text: &'life1 str,
        limit: usize,
        min_score: f32,
        project: Option<String>,
        root_path: Option<String>,
        hybrid: bool,
    ) -> Pin<Box<dyn Future<Output = Result<(Vec<SearchResult>, Vec<Vec<f32>>)>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
}
Expand description

Trait for vector database operations used by the RAG subsystem.

Implementations handle connection management, BM25 keyword indexing, and hybrid search fusion internally.

Required Methods§

Source

fn initialize<'life0, 'async_trait>( &'life0 self, dimension: usize, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Initialize the database and create collections if needed.

Source

fn store_embeddings<'life0, 'life1, 'async_trait>( &'life0 self, embeddings: Vec<Vec<f32>>, metadata: Vec<ChunkMetadata>, contents: Vec<String>, root_path: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store embeddings with metadata.

root_path is the normalized root of the indexed project — used for per-project BM25 isolation.

Source

fn search<'life0, 'life1, 'async_trait>( &'life0 self, query_vector: Vec<f32>, query_text: &'life1 str, limit: usize, min_score: f32, project: Option<String>, root_path: Option<String>, hybrid: bool, ) -> Pin<Box<dyn Future<Output = Result<Vec<SearchResult>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Search for similar vectors.

Source

fn search_filtered<'life0, 'life1, 'async_trait>( &'life0 self, query_vector: Vec<f32>, query_text: &'life1 str, limit: usize, min_score: f32, project: Option<String>, root_path: Option<String>, hybrid: bool, file_extensions: Vec<String>, languages: Vec<String>, path_patterns: Vec<String>, ) -> Pin<Box<dyn Future<Output = Result<Vec<SearchResult>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Search with additional filters (extensions, languages, path patterns).

Source

fn delete_by_file<'life0, 'life1, 'async_trait>( &'life0 self, file_path: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Delete embeddings for a specific file.

Source

fn clear<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Clear all embeddings.

Source

fn get_statistics<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<DatabaseStats>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get statistics about the stored data.

Source

fn flush<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Flush/save changes to disk.

Source

fn count_by_root_path<'life0, 'life1, 'async_trait>( &'life0 self, root_path: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Count embeddings for a specific root path.

Source

fn get_indexed_files<'life0, 'life1, 'async_trait>( &'life0 self, root_path: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get unique file paths indexed for a specific root path.

Provided Methods§

Source

fn search_with_embeddings<'life0, 'life1, 'async_trait>( &'life0 self, query_vector: Vec<f32>, query_text: &'life1 str, limit: usize, min_score: f32, project: Option<String>, root_path: Option<String>, hybrid: bool, ) -> Pin<Box<dyn Future<Output = Result<(Vec<SearchResult>, Vec<Vec<f32>>)>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Search and return results together with their embedding vectors.

Used by the spectral diversity reranker which needs the raw embeddings to compute pairwise similarities. The default implementation delegates to search and returns empty embedding vectors.

Implementors§