use std::collections::HashSet;
use crate::error::Result;
#[derive(Debug, Clone)]
pub struct Chunk {
pub doc_id: i64,
pub chunk_index: usize,
pub text: String,
pub doc_title: String,
pub doc_path: String,
}
#[derive(Debug, Clone)]
pub struct ChunkSearchResult {
pub doc_id: i64,
pub doc_title: String,
pub doc_path: String,
pub chunk_index: usize,
pub chunk_text: String,
pub score: f64,
}
pub struct VecInfo {
pub embedding_dim: u32,
pub vector_count: u64,
pub pending_count: u64,
}
pub trait VectorStore {
fn embedded_chunk_keys(&self) -> Result<HashSet<(i64, usize)>>;
fn insert_embeddings(&self, chunks: &[Chunk], embeddings: &[Vec<f32>]) -> Result<()>;
fn search_similar(&self, query_vec: &[f32], limit: usize) -> Result<Vec<ChunkSearchResult>>;
}
pub(crate) fn vec_serialize(v: &[f32]) -> Vec<u8> {
v.iter().flat_map(|f| f.to_le_bytes()).collect()
}