Skip to main content

entrenar/yaml_mode/manifest/
extended.rs

1//! Extended Configurations
2//!
3//! Contains extended configuration types for the YAML Mode QA Epic.
4
5use serde::{Deserialize, Serialize};
6
7/// CITL (Compiler-in-the-Loop) configuration
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct CitlConfig {
10    /// Mode: suggest, trace, index, tarantula
11    pub mode: String,
12
13    /// Error code for suggestions
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub error_code: Option<String>,
16
17    /// Top K suggestions
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub top_k: Option<usize>,
20
21    /// Workspace mode for cross-crate analysis
22    #[serde(default, skip_serializing_if = "Option::is_none")]
23    pub workspace: Option<bool>,
24
25    /// Include dependencies in analysis
26    #[serde(default, skip_serializing_if = "Option::is_none")]
27    pub include_deps: Option<bool>,
28}
29
30/// RAG (Retrieval-Augmented Generation) configuration
31#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct RagConfig {
33    /// Pattern store path
34    pub store: String,
35
36    /// Similarity threshold
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub similarity_threshold: Option<f64>,
39
40    /// Max results to return
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    pub max_results: Option<usize>,
43}
44
45/// Graph output configuration
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct GraphConfig {
48    /// Output file path
49    pub output: String,
50
51    /// Output format (dot, json, etc.)
52    #[serde(default, skip_serializing_if = "Option::is_none")]
53    pub format: Option<String>,
54
55    /// Include edges in graph
56    #[serde(default, skip_serializing_if = "Option::is_none")]
57    pub include_edges: Option<bool>,
58}
59
60/// Distillation configuration
61#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct DistillationConfig {
63    /// Teacher model configuration
64    pub teacher: DistillModelRef,
65
66    /// Student model configuration
67    pub student: DistillModelRef,
68
69    /// Distillation temperature
70    pub temperature: f64,
71
72    /// Alpha weight for distillation loss vs hard labels
73    pub alpha: f64,
74
75    /// Loss function (kl_div, mse, etc.)
76    #[serde(default, skip_serializing_if = "Option::is_none")]
77    pub loss: Option<String>,
78}
79
80/// Model reference for distillation
81#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct DistillModelRef {
83    /// Model source path
84    pub source: String,
85
86    /// Device placement
87    #[serde(default, skip_serializing_if = "Option::is_none")]
88    pub device: Option<String>,
89}
90
91/// Inspection configuration for data analysis
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct InspectConfig {
94    /// Inspection mode: outliers, distribution, correlation
95    pub mode: String,
96
97    /// Z-score threshold for outlier detection
98    #[serde(default, skip_serializing_if = "Option::is_none")]
99    pub z_threshold: Option<f64>,
100
101    /// Action on detection: log, drop, flag
102    #[serde(default, skip_serializing_if = "Option::is_none")]
103    pub action: Option<String>,
104
105    /// Columns to inspect
106    #[serde(default, skip_serializing_if = "Option::is_none")]
107    pub columns: Option<Vec<String>>,
108}
109
110/// Privacy configuration for differential privacy
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct PrivacyConfig {
113    /// Enable differential privacy
114    pub differential: bool,
115
116    /// Privacy budget epsilon
117    pub epsilon: f64,
118
119    /// Privacy budget delta
120    #[serde(default, skip_serializing_if = "Option::is_none")]
121    pub delta: Option<f64>,
122
123    /// Maximum gradient norm for clipping
124    #[serde(default, skip_serializing_if = "Option::is_none")]
125    pub max_grad_norm: Option<f64>,
126
127    /// Noise multiplier
128    #[serde(default, skip_serializing_if = "Option::is_none")]
129    pub noise_multiplier: Option<f64>,
130
131    /// Privacy accountant type (rdp, gdp, etc.)
132    #[serde(default, skip_serializing_if = "Option::is_none")]
133    pub accountant: Option<String>,
134}
135
136/// Audit configuration for bias and fairness testing
137#[derive(Debug, Clone, Serialize, Deserialize)]
138pub struct AuditConfig {
139    /// Audit type: bias, fairness, security
140    #[serde(rename = "type")]
141    pub audit_type: String,
142
143    /// Protected attribute for bias testing
144    #[serde(default, skip_serializing_if = "Option::is_none")]
145    pub protected_attr: Option<String>,
146
147    /// Favorable outcome value
148    #[serde(default, skip_serializing_if = "Option::is_none")]
149    pub favorable_outcome: Option<i32>,
150
151    /// Metrics to compute
152    #[serde(default, skip_serializing_if = "Option::is_none")]
153    pub metrics: Option<Vec<String>>,
154
155    /// Threshold for passing audit
156    #[serde(default, skip_serializing_if = "Option::is_none")]
157    pub threshold: Option<f64>,
158
159    /// Subgroups to analyze
160    #[serde(default, skip_serializing_if = "Option::is_none")]
161    pub subgroups: Option<Vec<String>>,
162}
163
164/// Session configuration for stateful training
165#[derive(Debug, Clone, Serialize, Deserialize)]
166pub struct SessionConfig {
167    /// Unique session identifier
168    pub id: String,
169
170    /// Auto-save session state
171    #[serde(default, skip_serializing_if = "Option::is_none")]
172    pub auto_save: Option<bool>,
173
174    /// Resume on crash
175    #[serde(default, skip_serializing_if = "Option::is_none")]
176    pub resume_on_crash: Option<bool>,
177
178    /// State directory
179    #[serde(default, skip_serializing_if = "Option::is_none")]
180    pub state_dir: Option<String>,
181}
182
183/// Stress testing configuration
184#[derive(Debug, Clone, Serialize, Deserialize)]
185pub struct StressConfig {
186    /// Number of parallel jobs
187    pub parallel_jobs: usize,
188
189    /// Test duration (e.g., "24h")
190    #[serde(default, skip_serializing_if = "Option::is_none")]
191    pub duration: Option<String>,
192
193    /// Memory limit as fraction (0.0-1.0)
194    #[serde(default, skip_serializing_if = "Option::is_none")]
195    pub memory_limit: Option<f64>,
196
197    /// Backpressure configuration
198    #[serde(default, skip_serializing_if = "Option::is_none")]
199    pub backpressure: Option<BackpressureConfig>,
200}
201
202/// Backpressure configuration for stress testing
203#[derive(Debug, Clone, Serialize, Deserialize)]
204pub struct BackpressureConfig {
205    /// Enable backpressure handling
206    pub enabled: bool,
207
208    /// Queue size
209    #[serde(default, skip_serializing_if = "Option::is_none")]
210    pub queue_size: Option<usize>,
211
212    /// Drop policy: oldest, newest, random
213    #[serde(default, skip_serializing_if = "Option::is_none")]
214    pub drop_policy: Option<String>,
215}
216
217/// Benchmark configuration
218#[derive(Debug, Clone, Serialize, Deserialize)]
219pub struct BenchmarkConfig {
220    /// Benchmark mode: inference, training, throughput
221    pub mode: String,
222
223    /// Warmup iterations
224    #[serde(default, skip_serializing_if = "Option::is_none")]
225    pub warmup: Option<usize>,
226
227    /// Number of iterations
228    #[serde(default, skip_serializing_if = "Option::is_none")]
229    pub iterations: Option<usize>,
230
231    /// Batch sizes to test
232    #[serde(default, skip_serializing_if = "Option::is_none")]
233    pub batch_sizes: Option<Vec<usize>>,
234
235    /// Percentiles to report
236    #[serde(default, skip_serializing_if = "Option::is_none")]
237    pub percentiles: Option<Vec<String>>,
238}
239
240/// Debug configuration
241#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct DebugConfig {
243    /// Enable memory profiling
244    #[serde(default, skip_serializing_if = "Option::is_none")]
245    pub memory_profile: Option<bool>,
246
247    /// Log interval in steps
248    #[serde(default, skip_serializing_if = "Option::is_none")]
249    pub log_interval: Option<usize>,
250
251    /// GC interval in steps
252    #[serde(default, skip_serializing_if = "Option::is_none")]
253    pub gc_interval: Option<usize>,
254}
255
256/// Signing configuration for model artifacts
257#[derive(Debug, Clone, Serialize, Deserialize)]
258pub struct SigningConfig {
259    /// Enable signing
260    pub enabled: bool,
261
262    /// Signing algorithm (ed25519, etc.)
263    #[serde(default, skip_serializing_if = "Option::is_none")]
264    pub algorithm: Option<String>,
265
266    /// Signing key (env var reference)
267    #[serde(default, skip_serializing_if = "Option::is_none")]
268    pub key: Option<String>,
269}
270
271/// Verification configuration for production releases
272#[derive(Debug, Clone, Serialize, Deserialize)]
273pub struct VerificationConfig {
274    /// Require all 25 QA checks
275    #[serde(default, skip_serializing_if = "Option::is_none")]
276    pub all_25_checks: Option<bool>,
277
278    /// QA lead sign-off requirement
279    #[serde(default, skip_serializing_if = "Option::is_none")]
280    pub qa_lead_sign_off: Option<String>,
281
282    /// Engineering lead sign-off requirement
283    #[serde(default, skip_serializing_if = "Option::is_none")]
284    pub eng_lead_sign_off: Option<String>,
285
286    /// Safety officer sign-off requirement
287    #[serde(default, skip_serializing_if = "Option::is_none")]
288    pub safety_officer_sign_off: Option<String>,
289}