vein-database 0.1.0

Database layer for Vein - shared memory system for AI agents and tools
Documentation
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,
        }
    }
}