hermes_core/segment/
vector_data.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct FlatVectorData {
8 pub dim: usize,
9 pub vectors: Vec<Vec<f32>>,
10 pub doc_ids: Vec<(u32, u16)>,
13}
14
15impl FlatVectorData {
16 pub fn estimated_memory_bytes(&self) -> usize {
18 let vec_overhead = std::mem::size_of::<Vec<f32>>();
20 let vectors_bytes: usize = self
21 .vectors
22 .iter()
23 .map(|v| v.capacity() * 4 + vec_overhead)
24 .sum();
25 let doc_ids_bytes = self.doc_ids.capacity() * 8;
27 vectors_bytes + doc_ids_bytes + vec_overhead * 2
28 }
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct IVFRaBitQIndexData {
34 pub index: crate::structures::IVFRaBitQIndex,
35 pub centroids: crate::structures::CoarseCentroids,
36 pub codebook: crate::structures::RaBitQCodebook,
37}
38
39impl IVFRaBitQIndexData {
40 pub fn to_bytes(&self) -> std::io::Result<Vec<u8>> {
41 serde_json::to_vec(self)
42 .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))
43 }
44
45 pub fn from_bytes(data: &[u8]) -> std::io::Result<Self> {
46 serde_json::from_slice(data)
47 .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))
48 }
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct ScaNNIndexData {
54 pub index: crate::structures::IVFPQIndex,
55 pub centroids: crate::structures::CoarseCentroids,
56 pub codebook: crate::structures::PQCodebook,
57}
58
59impl ScaNNIndexData {
60 pub fn to_bytes(&self) -> std::io::Result<Vec<u8>> {
61 serde_json::to_vec(self)
62 .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))
63 }
64
65 pub fn from_bytes(data: &[u8]) -> std::io::Result<Self> {
66 serde_json::from_slice(data)
67 .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))
68 }
69}