MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / rerank_codec_from_bytes

Function rerank_codec_from_bytes

nodedb-vector/src/rerank/codec.rs:79–123  ·  view source on GitHub ↗

Reconstruct a `RerankCodec` from its byte form. The `name` tag tells us which wrapper to dispatch into; the bytes are the codec's own format.

(
    name: CodecName,
    bytes: &[u8],
)

Source from the content-addressed store, hash-verified

77/// Reconstruct a `RerankCodec` from its byte form. The `name` tag tells us
78/// which wrapper to dispatch into; the bytes are the codec's own format.
79pub fn rerank_codec_from_bytes(
80 name: CodecName,
81 bytes: &[u8],
82) -> Result<Arc<dyn RerankCodec>, RerankError> {
83 use crate::quantize::pq::PqCodec;
84 use crate::quantize::sq8::Sq8Codec;
85 use crate::rerank::codecs::{BbqRerank, BinaryRerank, PqRerank, RaBitQRerank, Sq8Rerank};
86 use nodedb_codec::vector_quant::bbq::BbqCodec;
87 use nodedb_codec::vector_quant::rabitq::RaBitQCodec;
88
89 match name {
90 CodecName::Sq8 => {
91 let inner = Sq8Codec::from_bytes(bytes)
92 .map_err(|e| RerankError::BadInput(format!("sq8 from_bytes: {e}")))?;
93 Ok(Arc::new(Sq8Rerank::from_codec(inner)))
94 }
95 CodecName::Binary => {
96 // Format: [NDBIN\0 (6 bytes)][version u8 = 1][dim u32 LE (4 bytes)] — 11 bytes total.
97 if bytes.len() < 11 {
98 return Err(RerankError::BadInput("binary from_bytes: too short".into()));
99 }
100 if &bytes[..6] != b"NDBIN\0" {
101 return Err(RerankError::BadInput("binary from_bytes: bad magic".into()));
102 }
103 // bytes[6] is version, bytes[7..11] is dim as u32 LE.
104 let dim = u32::from_le_bytes([bytes[7], bytes[8], bytes[9], bytes[10]]) as usize;
105 Ok(Arc::new(BinaryRerank::new(dim)))
106 }
107 CodecName::Pq => {
108 let inner = PqCodec::from_bytes(bytes)
109 .map_err(|e| RerankError::BadInput(format!("pq from_bytes: {e}")))?;
110 Ok(Arc::new(PqRerank::from_codec(inner)))
111 }
112 CodecName::RaBitQ => {
113 let inner = RaBitQCodec::from_bytes(bytes)
114 .map_err(|e| RerankError::BadInput(format!("rabitq from_bytes: {e}")))?;
115 Ok(Arc::new(RaBitQRerank::from_codec(inner)))
116 }
117 CodecName::Bbq => {
118 let inner = BbqCodec::from_bytes(bytes)
119 .map_err(|e| RerankError::BadInput(format!("bbq from_bytes: {e}")))?;
120 Ok(Arc::new(BbqRerank::from_codec(inner)))
121 }
122 }
123}

Callers 1

from_bytesMethod · 0.85

Calls 1

lenMethod · 0.45

Tested by

no test coverage detected