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)
151 .map(|i| (i as f32 / 128.0) - 0.5)
152 .collect();
153
154 let policy = GovernancePolicy::default();
158 let request = GovernanceRequest {
159 content_type: ContentType::Model,
160 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
161 accuracy_requirement: 0.98, latency_tolerance_ms: 500,
163 admissibility: quant_governor::AdmissibilityClass::Standard,
164 };
165 let decision = policy.evaluate(request).expect("policy evaluate");
166 assert_eq!(decision.codec, CodecProfile::Fib, "test should land on Fib");
167
168 let codec_id = match decision.codec {
172 CodecProfile::Fib => scr_runtime_compression::CodecId::FibQuant,
173 CodecProfile::Polar => scr_runtime_compression::CodecId::Polar,
174 CodecProfile::Qjl => scr_runtime_compression::CodecId::Qjl,
175 _ => panic!("expected Fib / Polar / Qjl"),
176 };
177 let compressed = scr_runtime_compression::encode(codec_id, &embedding, 42)
178 .expect("fib_quant encode failed");
179
180 let raw_size = embedding.len() * std::mem::size_of::<f32>();
182 assert!(
183 compressed.len() < raw_size,
184 "compressed ({} bytes) should be smaller than raw ({} bytes)",
185 compressed.len(),
186 raw_size
187 );
188 }
189
190 #[test]
194 fn encode_governed_routes_to_polar_for_low_latency_text() {
195 use quant_governor::{ContentType, GovernanceRequest};
196 let embedding: Vec<f32> = (0..128).map(|i| (i as f32 * 0.01) - 0.5).collect();
199 let request = GovernanceRequest {
200 content_type: ContentType::Text,
201 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
202 accuracy_requirement: 0.95, latency_tolerance_ms: 10, admissibility: quant_governor::AdmissibilityClass::Standard,
205 };
206 let policy = GovernancePolicy::default();
207 let decision = policy.evaluate(request).expect("policy evaluate");
208 assert_eq!(decision.codec, quant_governor::CodecProfile::Polar);
209
210 let codec_id = match decision.codec {
212 quant_governor::CodecProfile::Polar => scr_runtime_compression::CodecId::Polar,
213 other => panic!("expected Polar, got {other:?}"),
214 };
215 let compressed = scr_runtime_compression::encode(codec_id, &embedding, 42)
216 .expect("polar encode failed");
217 let decoded = scr_runtime_compression::decode(codec_id, &compressed)
219 .expect("polar decode failed");
220 assert_eq!(compressed, decoded);
221 }
222
223 #[test]
226 fn encode_governed_routes_to_qjl_for_large_low_latency_text() {
227 use quant_governor::{ContentType, GovernanceRequest};
228 let embedding: Vec<f32> = (0..16384).map(|i| (i as f32 * 0.0001) - 0.5).collect();
231 let request = GovernanceRequest {
232 content_type: ContentType::Text,
233 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
234 accuracy_requirement: 0.95,
235 latency_tolerance_ms: 10,
236 admissibility: quant_governor::AdmissibilityClass::Standard,
237 };
238 let policy = GovernancePolicy::default();
239 let decision = policy.evaluate(request).expect("policy evaluate");
240 assert_eq!(decision.codec, quant_governor::CodecProfile::Qjl);
241
242 let codec_id = match decision.codec {
243 quant_governor::CodecProfile::Qjl => scr_runtime_compression::CodecId::Qjl,
244 other => panic!("expected Qjl, got {other:?}"),
245 };
246 let compressed = scr_runtime_compression::encode(codec_id, &embedding, 42)
247 .expect("qjl encode failed");
248 assert!(
250 compressed.len() < 200,
251 "qjl sketch ({} bytes) should be ~120 bytes regardless of dim",
252 compressed.len()
253 );
254 }
255
256 #[test]
257 fn encode_governed_with_custom_policy() {
258 let embedding: Vec<f32> = (0..256).map(|i| (i as f32) * 0.01 - 0.5).collect();
259 let policy = GovernancePolicy::default();
260
261 let result = encode_governed(&embedding, &policy).expect("encode failed");
262
263 assert!(result.governance_receipt_id.starts_with("gr-"));
265 assert!(result.degradation_budget >= 0.0);
267 assert!(result.degradation_budget <= 1.0);
268 }
269
270 #[test]
279 fn encode_governed_default_round_trip_through_uncompressed() {
280 use quant_governor::{ContentType, GovernanceRequest};
281
282 let embedding: Vec<f32> = (0..128)
286 .map(|i| ((i as f32 * 0.13).sin()) - 0.5)
287 .collect();
288
289 let policy = GovernancePolicy::default();
291 let request = GovernanceRequest {
292 content_type: ContentType::Structured,
293 size_bytes: (embedding.len() * std::mem::size_of::<f32>()) as u64,
294 accuracy_requirement: 0.99, latency_tolerance_ms: 500,
296 admissibility: quant_governor::AdmissibilityClass::Standard,
297 };
298 let decision = policy.evaluate(request).expect("policy evaluate");
299 assert_eq!(decision.codec, quant_governor::CodecProfile::Raw);
301
302 let codec_id = scr_runtime_compression::CodecId::Uncompressed;
303 let compressed = scr_runtime_compression::encode(codec_id, &embedding, 42)
304 .expect("uncompressed encode failed");
305 let decoded_bytes =
306 scr_runtime_compression::decode(codec_id, &compressed).expect("decode failed");
307
308 let decoded: Vec<f32> = decoded_bytes
309 .chunks_exact(4)
310 .map(|c| f32::from_le_bytes([c[0], c[1], c[2], c[3]]))
311 .collect();
312 assert_eq!(decoded, embedding);
313 }
314}