Skip to main content

entrenar/yaml_mode/manifest/
core.rs

1//! Core Training Manifest
2//!
3//! Contains the root TrainingManifest struct that represents the complete YAML Mode
4//! training configuration.
5
6use serde::{Deserialize, Serialize};
7
8use super::callback::CallbackConfig;
9use super::data::DataConfig;
10use super::extended::{
11    AuditConfig, BenchmarkConfig, CitlConfig, DebugConfig, DistillationConfig, GraphConfig,
12    InspectConfig, PrivacyConfig, RagConfig, SessionConfig, SigningConfig, StressConfig,
13    VerificationConfig,
14};
15use super::lora::LoraConfig;
16use super::model::ModelConfig;
17use super::monitoring::MonitoringConfig;
18use super::optimizer::OptimizerConfig;
19use super::output::OutputConfig;
20use super::publish::PublishConfig;
21use super::quantize::QuantizeConfig;
22use super::scheduler::SchedulerConfig;
23use super::training::TrainingConfig;
24
25/// Complete training manifest (root structure)
26///
27/// # Required Fields
28/// - `entrenar`: Specification version (must be "1.0")
29/// - `name`: Experiment identifier
30/// - `version`: Experiment version
31#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct TrainingManifest {
33    /// Specification version (required)
34    pub entrenar: String,
35
36    /// Experiment name (required)
37    pub name: String,
38
39    /// Experiment version (required)
40    pub version: String,
41
42    /// Human-readable description
43    #[serde(default, skip_serializing_if = "Option::is_none")]
44    pub description: Option<String>,
45
46    /// Global random seed for reproducibility
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    pub seed: Option<u64>,
49
50    /// Dataset configuration
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub data: Option<DataConfig>,
53
54    /// Model configuration
55    #[serde(default, skip_serializing_if = "Option::is_none")]
56    pub model: Option<ModelConfig>,
57
58    /// Optimizer configuration
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub optimizer: Option<OptimizerConfig>,
61
62    /// Learning rate scheduler configuration
63    #[serde(default, skip_serializing_if = "Option::is_none")]
64    pub scheduler: Option<SchedulerConfig>,
65
66    /// Training loop configuration
67    #[serde(default, skip_serializing_if = "Option::is_none")]
68    pub training: Option<TrainingConfig>,
69
70    /// LoRA fine-tuning configuration
71    #[serde(default, skip_serializing_if = "Option::is_none")]
72    pub lora: Option<LoraConfig>,
73
74    /// Quantization configuration
75    #[serde(default, skip_serializing_if = "Option::is_none")]
76    pub quantize: Option<QuantizeConfig>,
77
78    /// Monitoring configuration
79    #[serde(default, skip_serializing_if = "Option::is_none")]
80    pub monitoring: Option<MonitoringConfig>,
81
82    /// Training callbacks
83    #[serde(default, skip_serializing_if = "Option::is_none")]
84    pub callbacks: Option<Vec<CallbackConfig>>,
85
86    /// Output and artifact configuration
87    #[serde(default, skip_serializing_if = "Option::is_none")]
88    pub output: Option<OutputConfig>,
89
90    /// Publish configuration for auto-uploading to HuggingFace Hub
91    #[serde(default, skip_serializing_if = "Option::is_none")]
92    pub publish: Option<PublishConfig>,
93
94    // Extended configurations for YAML Mode QA Epic
95    /// CITL (Compiler-in-the-Loop) configuration
96    #[serde(default, skip_serializing_if = "Option::is_none")]
97    pub citl: Option<CitlConfig>,
98
99    /// RAG configuration
100    #[serde(default, skip_serializing_if = "Option::is_none")]
101    pub rag: Option<RagConfig>,
102
103    /// Graph output configuration
104    #[serde(default, skip_serializing_if = "Option::is_none")]
105    pub graph: Option<GraphConfig>,
106
107    /// Distillation configuration
108    #[serde(default, skip_serializing_if = "Option::is_none")]
109    pub distillation: Option<DistillationConfig>,
110
111    /// Inspection configuration
112    #[serde(default, skip_serializing_if = "Option::is_none")]
113    pub inspect: Option<InspectConfig>,
114
115    /// Privacy configuration
116    #[serde(default, skip_serializing_if = "Option::is_none")]
117    pub privacy: Option<PrivacyConfig>,
118
119    /// Audit configuration
120    #[serde(default, skip_serializing_if = "Option::is_none")]
121    pub audit: Option<AuditConfig>,
122
123    /// Session configuration
124    #[serde(default, skip_serializing_if = "Option::is_none")]
125    pub session: Option<SessionConfig>,
126
127    /// Stress testing configuration
128    #[serde(default, skip_serializing_if = "Option::is_none")]
129    pub stress: Option<StressConfig>,
130
131    /// Benchmark configuration
132    #[serde(default, skip_serializing_if = "Option::is_none")]
133    pub benchmark: Option<BenchmarkConfig>,
134
135    /// Debug configuration
136    #[serde(default, skip_serializing_if = "Option::is_none")]
137    pub debug: Option<DebugConfig>,
138
139    /// Signing configuration
140    #[serde(default, skip_serializing_if = "Option::is_none")]
141    pub signing: Option<SigningConfig>,
142
143    /// Verification configuration
144    #[serde(default, skip_serializing_if = "Option::is_none")]
145    pub verification: Option<VerificationConfig>,
146
147    /// Lockfile path for reproducibility
148    #[serde(default, skip_serializing_if = "Option::is_none")]
149    pub lockfile: Option<String>,
150
151    /// Strict mode for lockfile enforcement
152    #[serde(default, skip_serializing_if = "Option::is_none")]
153    pub strict: Option<bool>,
154
155    /// Strict validation mode
156    #[serde(default, skip_serializing_if = "Option::is_none")]
157    pub strict_validation: Option<bool>,
158
159    /// Require peer review for production
160    #[serde(default, skip_serializing_if = "Option::is_none")]
161    pub require_peer_review: Option<bool>,
162}