pub mod bridge;
mod manifest;
mod templates;
mod validation;
#[cfg(test)]
mod tests;
pub use bridge::{manifest_to_spec, BridgeError, BridgeResult};
pub use manifest::{
AuditConfig, BackpressureConfig, BenchmarkConfig, CallbackConfig, CallbackType, CitlConfig,
DataConfig, DataLoader, DataSplit, DebugConfig, DistillModelRef, DistillationConfig,
DriftDetectionConfig, GradientConfig, GraphConfig, InspectConfig, LoraConfig,
MixedPrecisionConfig, ModelConfig, MonitoringConfig, OptimizerConfig, OutputConfig,
PreprocessingStep, PrivacyConfig, PublishConfig, QuantizeConfig, RagConfig, SchedulerConfig,
SessionConfig, SigningConfig, StressConfig, TerminalMonitor, TrackingConfig, TrainingConfig,
TrainingManifest, VerificationConfig, WarmupConfig,
};
pub use templates::{generate_manifest, generate_manifest_with_hints, generate_yaml, Template};
pub use validation::{validate_manifest, ManifestError, ValidationResult};
use std::path::Path;
pub fn load_manifest(path: &Path) -> crate::Result<TrainingManifest> {
let content = std::fs::read_to_string(path)
.map_err(|e| crate::Error::Io(format!("Failed to read manifest: {e}")))?;
let manifest: TrainingManifest = serde_yaml::from_str(&content)
.map_err(|e| crate::Error::Parse(format!("Failed to parse manifest: {e}")))?;
validate_manifest(&manifest).map_err(|e| crate::Error::Validation(e.to_string()))?;
Ok(manifest)
}
pub fn save_manifest(manifest: &TrainingManifest, path: &Path) -> crate::Result<()> {
let content = serde_yaml::to_string(manifest)
.map_err(|e| crate::Error::Parse(format!("Failed to serialize manifest: {e}")))?;
std::fs::write(path, content)
.map_err(|e| crate::Error::Io(format!("Failed to write manifest: {e}")))?;
Ok(())
}