Skip to main content

entrenar/yaml_mode/
mod.rs

1//! YAML Mode Training - Declarative, No-Code Training Interface
2//!
3//! This module implements the YAML Mode Training specification (v1.0) which enables
4//! ML practitioners to configure, execute, and monitor model training using only YAML.
5//!
6//! ## Core Principles (Toyota Way)
7//!
8//! - **Muda Elimination**: No redundant code; configuration-only workflows
9//! - **Poka-yoke**: Schema validation catches errors at parse time, not runtime
10//! - **Jidoka**: Built-in quality with automatic checkpointing and early stopping
11//! - **Heijunka**: Reproducible training through deterministic seeding
12//! - **Kaizen**: Experiment tracking enables iterative refinement
13//!
14//! ## Usage
15//!
16//! ```yaml
17//! entrenar: "1.0"
18//! name: "my-experiment"
19//! version: "1.0.0"
20//!
21//! data:
22//!   source: "./data/train.parquet"
23//!
24//! model:
25//!   source: "./models/base.safetensors"
26//!
27//! training:
28//!   epochs: 10
29//! ```
30
31pub mod bridge;
32mod manifest;
33mod templates;
34mod validation;
35
36#[cfg(test)]
37mod tests;
38
39pub use bridge::{manifest_to_spec, BridgeError, BridgeResult};
40pub use manifest::{
41    AuditConfig, BackpressureConfig, BenchmarkConfig, CallbackConfig, CallbackType, CitlConfig,
42    DataConfig, DataLoader, DataSplit, DebugConfig, DistillModelRef, DistillationConfig,
43    DriftDetectionConfig, GradientConfig, GraphConfig, InspectConfig, LoraConfig,
44    MixedPrecisionConfig, ModelConfig, MonitoringConfig, OptimizerConfig, OutputConfig,
45    PreprocessingStep, PrivacyConfig, PublishConfig, QuantizeConfig, RagConfig, SchedulerConfig,
46    SessionConfig, SigningConfig, StressConfig, TerminalMonitor, TrackingConfig, TrainingConfig,
47    TrainingManifest, VerificationConfig, WarmupConfig,
48};
49pub use templates::{generate_manifest, generate_manifest_with_hints, generate_yaml, Template};
50pub use validation::{validate_manifest, ManifestError, ValidationResult};
51
52use std::path::Path;
53
54/// Load and validate a training manifest from a YAML file
55pub fn load_manifest(path: &Path) -> crate::Result<TrainingManifest> {
56    let content = std::fs::read_to_string(path)
57        .map_err(|e| crate::Error::Io(format!("Failed to read manifest: {e}")))?;
58
59    let manifest: TrainingManifest = serde_yaml::from_str(&content)
60        .map_err(|e| crate::Error::Parse(format!("Failed to parse manifest: {e}")))?;
61
62    validate_manifest(&manifest).map_err(|e| crate::Error::Validation(e.to_string()))?;
63
64    Ok(manifest)
65}
66
67/// Save a training manifest to a YAML file
68pub fn save_manifest(manifest: &TrainingManifest, path: &Path) -> crate::Result<()> {
69    let content = serde_yaml::to_string(manifest)
70        .map_err(|e| crate::Error::Parse(format!("Failed to serialize manifest: {e}")))?;
71
72    std::fs::write(path, content)
73        .map_err(|e| crate::Error::Io(format!("Failed to write manifest: {e}")))?;
74
75    Ok(())
76}