semtree-rag 0.3.0

RAG pipeline: index, search, and context injection for LLMs
Documentation
use std::sync::Arc;

use semtree_embed::Embedder;
use semtree_store::{Hit, VectorStore};

use crate::RagError;

pub struct SearchEngine {
    embedder: Arc<dyn Embedder>,
    store: Arc<dyn VectorStore>,
}

impl SearchEngine {
    pub fn new(embedder: Arc<dyn Embedder>, store: Arc<dyn VectorStore>) -> Self {
        Self { embedder, store }
    }

    pub async fn search(&self, query: &str, top_k: usize) -> Result<Vec<Hit>, RagError> {
        let embedding = self.embedder.embed_one(query).await?;
        let hits = self.store.search(&embedding, top_k).await?;
        Ok(hits)
    }
}