use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CitlConfig {
pub mode: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub top_k: Option<usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub workspace: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_deps: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RagConfig {
pub store: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub similarity_threshold: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_results: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphConfig {
pub output: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_edges: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DistillationConfig {
pub teacher: DistillModelRef,
pub student: DistillModelRef,
pub temperature: f64,
pub alpha: f64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub loss: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DistillModelRef {
pub source: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub device: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InspectConfig {
pub mode: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub z_threshold: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub action: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub columns: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrivacyConfig {
pub differential: bool,
pub epsilon: f64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub delta: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_grad_norm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub noise_multiplier: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub accountant: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditConfig {
#[serde(rename = "type")]
pub audit_type: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub protected_attr: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub favorable_outcome: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metrics: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub threshold: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub subgroups: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionConfig {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub auto_save: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resume_on_crash: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state_dir: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StressConfig {
pub parallel_jobs: usize,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub duration: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memory_limit: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub backpressure: Option<BackpressureConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BackpressureConfig {
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub queue_size: Option<usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub drop_policy: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkConfig {
pub mode: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub warmup: Option<usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub iterations: Option<usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub batch_sizes: Option<Vec<usize>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub percentiles: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DebugConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memory_profile: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub log_interval: Option<usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub gc_interval: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SigningConfig {
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub algorithm: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub all_25_checks: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub qa_lead_sign_off: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub eng_lead_sign_off: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub safety_officer_sign_off: Option<String>,
}