Encode a full-precision vector to PQ bytes (one centroid index per subspace). The serialized form is the raw `UnifiedQuantizedVector` buffer (`as_bytes()`): 32-byte `QuantHeader` followed by `m` code bytes.
(&self, v: &[f32])
| 85 | /// The serialized form is the raw `UnifiedQuantizedVector` buffer |
| 86 | /// (`as_bytes()`): 32-byte `QuantHeader` followed by `m` code bytes. |
| 87 | fn encode(&self, v: &[f32]) -> Result<Vec<u8>, RerankError> { |
| 88 | if v.len() != self.dim { |
| 89 | return Err(RerankError::BadInput(format!( |
| 90 | "pq encode: vector len {} != codec dim {}", |
| 91 | v.len(), |
| 92 | self.dim |
| 93 | ))); |
| 94 | } |
| 95 | let codec = self.codec.as_ref().ok_or_else(|| { |
| 96 | RerankError::NotTrained( |
| 97 | "pq: codec must be trained before encoding (call train() with a sample of vectors)" |
| 98 | .to_string(), |
| 99 | ) |
| 100 | })?; |
| 101 | use nodedb_codec::vector_quant::codec::VectorCodec; |
| 102 | let quantized = <PqCodec as VectorCodec>::encode(codec, v); |
| 103 | Ok(quantized.as_ref().as_bytes().to_vec()) |
| 104 | } |
| 105 | |
| 106 | /// Prepare the query by precomputing the M×K asymmetric distance table. |
| 107 | /// |