1#[cfg(feature = "turbo-quant-codec")]
9pub mod governed {
10 use quant_governor::{
11 AdmissibilityClass, CodecProfile, ContentType, GovernancePolicy, GovernanceRequest,
12 };
13
14 #[derive(Debug, Clone)]
16 pub struct GovernedEncodeResult {
17 pub compressed_bytes: Vec<u8>,
19 pub codec_profile: CodecProfile,
21 pub governance_receipt_id: String,
23 pub degradation_budget: f64,
25 }
26
27 pub fn encode_governed(
42 embedding: &[f32],
43 policy: &GovernancePolicy,
44 ) -> Result<GovernedEncodeResult, String> {
45 const SEED: u64 = 42;
51
52 let request = GovernanceRequest {
53 content_type: ContentType::Structured,
54 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
55 accuracy_requirement: 0.99,
56 latency_tolerance_ms: 500,
57 admissibility: AdmissibilityClass::Standard,
58 };
59
60 let decision = policy.evaluate(request).map_err(|e| e.to_string())?;
61
62 let codec_id = match decision.codec {
64 CodecProfile::Raw => scr_runtime_compression::CodecId::Uncompressed,
65 CodecProfile::Q8 => scr_runtime_compression::CodecId::Uncompressed,
66 CodecProfile::Q4 => scr_runtime_compression::CodecId::Uncompressed,
67 CodecProfile::Turbo => scr_runtime_compression::CodecId::TurboQuant,
68 CodecProfile::Fib => scr_runtime_compression::CodecId::FibQuant,
69 CodecProfile::Polar => scr_runtime_compression::CodecId::Polar,
70 CodecProfile::Qjl => scr_runtime_compression::CodecId::Qjl,
71 };
72
73 let compressed = scr_runtime_compression::encode(codec_id, embedding, SEED)
78 .map_err(|e| format!("encode failed: {e}"))?;
79
80 Ok(GovernedEncodeResult {
81 compressed_bytes: compressed,
82 codec_profile: decision.codec,
83 governance_receipt_id: format!("gr-{}", uuid::Uuid::new_v4()),
84 degradation_budget: decision.degradation_budget,
85 })
86 }
87
88 pub fn encode_governed_default(embedding: &[f32]) -> Result<GovernedEncodeResult, String> {
93 encode_governed(embedding, &GovernancePolicy::default())
94 }
95}
96
97#[cfg(not(feature = "turbo-quant-codec"))]
98pub mod governed {
99 #[derive(Debug, Clone)]
107 pub struct GovernedEncodeResult {
108 pub compressed_bytes: Vec<u8>,
109 pub codec_profile: String,
110 pub governance_receipt_id: String,
111 pub degradation_budget: f64,
112 }
113
114 pub fn encode_governed(
116 _embedding: &[f32],
117 _policy: (),
118 ) -> Result<GovernedEncodeResult, String> {
119 Err("turbo-quant-codec feature is not enabled".to_string())
120 }
121
122 pub fn encode_governed_default(_embedding: &[f32]) -> Result<GovernedEncodeResult, String> {
124 Err("turbo-quant-codec feature is not enabled".to_string())
125 }
126}
127
128pub use governed::{encode_governed, encode_governed_default, GovernedEncodeResult};
130
131#[cfg(all(test, feature = "turbo-quant-codec"))]
132mod tests {
133 use super::governed::encode_governed;
134 use quant_governor::GovernancePolicy;
135
136 #[test]
146 fn encode_governed_produces_compressed_bytes() {
147 use quant_governor::{CodecProfile, ContentType, GovernanceRequest};
148
149 let embedding: Vec<f32> = (0..128).map(|i| (i as f32 / 128.0) - 0.5).collect();
151
152 let policy = GovernancePolicy::default();
156 let request = GovernanceRequest {
157 content_type: ContentType::Model,
158 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
159 accuracy_requirement: 0.98, latency_tolerance_ms: 500,
161 admissibility: quant_governor::AdmissibilityClass::Standard,
162 };
163 let decision = policy.evaluate(request).expect("policy evaluate");
164 assert_eq!(decision.codec, CodecProfile::Fib, "test should land on Fib");
165
166 let codec_id = match decision.codec {
170 CodecProfile::Fib => scr_runtime_compression::CodecId::FibQuant,
171 CodecProfile::Polar => scr_runtime_compression::CodecId::Polar,
172 CodecProfile::Qjl => scr_runtime_compression::CodecId::Qjl,
173 _ => panic!("expected Fib / Polar / Qjl"),
174 };
175 let compressed = scr_runtime_compression::encode(codec_id, &embedding, 42)
176 .expect("fib_quant encode failed");
177
178 let raw_size = embedding.len() * std::mem::size_of::<f32>();
180 assert!(
181 compressed.len() < raw_size,
182 "compressed ({} bytes) should be smaller than raw ({} bytes)",
183 compressed.len(),
184 raw_size
185 );
186 }
187
188 #[test]
192 fn encode_governed_routes_to_polar_for_low_latency_text() {
193 use quant_governor::{ContentType, GovernanceRequest};
194 let embedding: Vec<f32> = (0..128).map(|i| (i as f32 * 0.01) - 0.5).collect();
197 let request = GovernanceRequest {
198 content_type: ContentType::Text,
199 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
200 accuracy_requirement: 0.95, latency_tolerance_ms: 10, admissibility: quant_governor::AdmissibilityClass::Standard,
203 };
204 let policy = GovernancePolicy::default();
205 let decision = policy.evaluate(request).expect("policy evaluate");
206 assert_eq!(decision.codec, quant_governor::CodecProfile::Polar);
207
208 let codec_id = match decision.codec {
210 quant_governor::CodecProfile::Polar => scr_runtime_compression::CodecId::Polar,
211 other => panic!("expected Polar, got {other:?}"),
212 };
213 let compressed =
214 scr_runtime_compression::encode(codec_id, &embedding, 42).expect("polar encode failed");
215 let decoded =
217 scr_runtime_compression::decode(codec_id, &compressed).expect("polar decode failed");
218 assert_eq!(compressed, decoded);
219 }
220
221 #[test]
224 fn encode_governed_routes_to_qjl_for_large_low_latency_text() {
225 use quant_governor::{ContentType, GovernanceRequest};
226 let embedding: Vec<f32> = (0..16384).map(|i| (i as f32 * 0.0001) - 0.5).collect();
229 let request = GovernanceRequest {
230 content_type: ContentType::Text,
231 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
232 accuracy_requirement: 0.95,
233 latency_tolerance_ms: 10,
234 admissibility: quant_governor::AdmissibilityClass::Standard,
235 };
236 let policy = GovernancePolicy::default();
237 let decision = policy.evaluate(request).expect("policy evaluate");
238 assert_eq!(decision.codec, quant_governor::CodecProfile::Qjl);
239
240 let codec_id = match decision.codec {
241 quant_governor::CodecProfile::Qjl => scr_runtime_compression::CodecId::Qjl,
242 other => panic!("expected Qjl, got {other:?}"),
243 };
244 let compressed =
245 scr_runtime_compression::encode(codec_id, &embedding, 42).expect("qjl encode failed");
246 assert!(
248 compressed.len() < 200,
249 "qjl sketch ({} bytes) should be ~120 bytes regardless of dim",
250 compressed.len()
251 );
252 }
253
254 #[test]
255 fn encode_governed_with_custom_policy() {
256 let embedding: Vec<f32> = (0..256).map(|i| (i as f32) * 0.01 - 0.5).collect();
257 let policy = GovernancePolicy::default();
258
259 let result = encode_governed(&embedding, &policy).expect("encode failed");
260
261 assert!(result.governance_receipt_id.starts_with("gr-"));
263 assert!(result.degradation_budget >= 0.0);
265 assert!(result.degradation_budget <= 1.0);
266 }
267
268 #[test]
277 fn encode_governed_default_round_trip_through_uncompressed() {
278 use quant_governor::{ContentType, GovernanceRequest};
279
280 let embedding: Vec<f32> = (0..128).map(|i| ((i as f32 * 0.13).sin()) - 0.5).collect();
284
285 let policy = GovernancePolicy::default();
287 let request = GovernanceRequest {
288 content_type: ContentType::Structured,
289 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
290 accuracy_requirement: 0.99, latency_tolerance_ms: 500,
292 admissibility: quant_governor::AdmissibilityClass::Standard,
293 };
294 let decision = policy.evaluate(request).expect("policy evaluate");
295 assert_eq!(decision.codec, quant_governor::CodecProfile::Raw);
297
298 let codec_id = scr_runtime_compression::CodecId::Uncompressed;
299 let compressed = scr_runtime_compression::encode(codec_id, &embedding, 42)
300 .expect("uncompressed encode failed");
301 let decoded_bytes =
302 scr_runtime_compression::decode(codec_id, &compressed).expect("decode failed");
303
304 let decoded: Vec<f32> = decoded_bytes
305 .chunks_exact(4)
306 .map(|c| f32::from_le_bytes([c[0], c[1], c[2], c[3]]))
307 .collect();
308 assert_eq!(decoded, embedding);
309 }
310}