nodedb_types/
vector_model.rs1use serde::{Deserialize, Serialize};
9
10#[derive(
15 Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
16)]
17pub struct VectorModelMetadata {
18 pub model: String,
20 pub dimensions: usize,
22 pub created_at: String,
24 #[serde(default)]
27 pub strict_dimensions: bool,
28}
29
30#[derive(
35 Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
36)]
37pub struct VectorModelEntry {
38 pub tenant_id: u64,
40 pub collection: String,
42 pub column: String,
44 pub metadata: VectorModelMetadata,
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn serde_roundtrip() {
54 let entry = VectorModelEntry {
55 tenant_id: 1,
56 collection: "chunks".into(),
57 column: "embedding".into(),
58 metadata: VectorModelMetadata {
59 model: "text-embedding-3-large".into(),
60 dimensions: 1536,
61 created_at: "2026-03-01".into(),
62 strict_dimensions: false,
63 },
64 };
65 let bytes = zerompk::to_msgpack_vec(&entry).unwrap();
66 let restored: VectorModelEntry = zerompk::from_msgpack(&bytes).unwrap();
67 assert_eq!(restored.metadata.model, "text-embedding-3-large");
68 assert_eq!(restored.metadata.dimensions, 1536);
69 assert!(!restored.metadata.strict_dimensions);
70 }
71
72 #[test]
73 fn strict_dimensions_default_false() {
74 let meta = VectorModelMetadata {
76 model: "test".into(),
77 dimensions: 128,
78 created_at: "2026-01-01".into(),
79 strict_dimensions: false,
80 };
81 let bytes = zerompk::to_msgpack_vec(&meta).unwrap();
82 let restored: VectorModelMetadata = zerompk::from_msgpack(&bytes).unwrap();
83 assert!(!restored.strict_dimensions);
84 }
85}