topk_verify/
topk_verify.rs1use ed25519_dalek::SigningKey;
2use lllv_core::{Capsule, CapsuleFlags};
3use lllv_index::{IndexPackBuilder, QueryRequest};
4
5fn f32_to_bytes(v: &[f32]) -> Vec<u8> {
6 let mut out = Vec::with_capacity(v.len() * 4);
7 for x in v {
8 out.extend_from_slice(&x.to_le_bytes());
9 }
10 out
11}
12
13fn main() {
14 let dim: u16 = 3;
15 let sk = SigningKey::from_bytes(&[1u8; 32]);
16 let v1 = vec![1.0, 0.0, 0.0]; let v2 = vec![0.0, 1.0, 0.0]; let v3 = vec![0.0, 0.0, 1.0]; let cap_a = Capsule::create(dim, &f32_to_bytes(&v1), CapsuleFlags::NONE, &sk).unwrap();
21 let cap_b = Capsule::create(dim, &f32_to_bytes(&v2), CapsuleFlags::NONE, &sk).unwrap();
22 let cap_c = Capsule::create(dim, &f32_to_bytes(&v3), CapsuleFlags::NONE, &sk).unwrap();
23
24 let mut b = IndexPackBuilder::new(dim);
25 b.add_capsule("a".into(), cap_a).unwrap();
26 b.add_capsule("b".into(), cap_b).unwrap();
27 b.add_capsule("c".into(), cap_c).unwrap();
28
29 let pack = b.build(None).unwrap();
30 let ev = pack.query(&QueryRequest::from_vec(&v1), 3).unwrap();
31 pack.verify(&ev).unwrap();
32
33 println!("Pack CID : {}", ev.index_pack_cid);
34 for (i, r) in ev.results.iter().enumerate() {
35 println!(
36 "#{i} id={} score={:.4} leaf={} path_len={}",
37 r.id,
38 r.score,
39 r.leaf_hex,
40 r.path.len()
41 );
42 }
43}