pub mod lancedb;
pub mod table_names;
use anyhow::Result;
pub use lancedb::Entry;
pub use table_names::list_model_tables;
enum LanceBackend {
Lance(lancedb::LanceDb),
}
pub struct VectorDb {
backend: LanceBackend,
}
impl VectorDb {
pub async fn new(table_name: &str, vector_dim: usize) -> Result<Self> {
let db = lancedb::LanceDb::new(table_name, vector_dim).await?;
Ok(Self {
backend: LanceBackend::Lance(db),
})
}
pub async fn post(&self, id: &str, content: &str, vector: Vec<f32>) -> Result<String> {
match &self.backend {
LanceBackend::Lance(db) => db.post(id, content, vector).await,
}
}
pub async fn get(&self, query_vector: &[f32], limit: usize) -> Result<Vec<Entry>> {
match &self.backend {
LanceBackend::Lance(db) => db.get(query_vector, limit).await,
}
}
pub async fn patch(&self, id: &str, new_content: &str, new_vector: Vec<f32>) -> Result<()> {
match &self.backend {
LanceBackend::Lance(db) => db.patch(id, new_content, new_vector).await,
}
}
pub async fn delete(&self, id: &str) -> Result<()> {
match &self.backend {
LanceBackend::Lance(db) => db.delete(id).await,
}
}
pub async fn rebuild_index(&self) -> Result<()> {
match &self.backend {
LanceBackend::Lance(db) => db.rebuild_index().await,
}
}
}