use serde::{Deserialize, Serialize};
use super::callback::CallbackConfig;
use super::data::DataConfig;
use super::extended::{
AuditConfig, BenchmarkConfig, CitlConfig, DebugConfig, DistillationConfig, GraphConfig,
InspectConfig, PrivacyConfig, RagConfig, SessionConfig, SigningConfig, StressConfig,
VerificationConfig,
};
use super::lora::LoraConfig;
use super::model::ModelConfig;
use super::monitoring::MonitoringConfig;
use super::optimizer::OptimizerConfig;
use super::output::OutputConfig;
use super::publish::PublishConfig;
use super::quantize::QuantizeConfig;
use super::scheduler::SchedulerConfig;
use super::training::TrainingConfig;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrainingManifest {
pub entrenar: String,
pub name: String,
pub version: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seed: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data: Option<DataConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<ModelConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub optimizer: Option<OptimizerConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scheduler: Option<SchedulerConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub training: Option<TrainingConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lora: Option<LoraConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub quantize: Option<QuantizeConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub monitoring: Option<MonitoringConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub callbacks: Option<Vec<CallbackConfig>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub output: Option<OutputConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub publish: Option<PublishConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub citl: Option<CitlConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rag: Option<RagConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub graph: Option<GraphConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub distillation: Option<DistillationConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inspect: Option<InspectConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub privacy: Option<PrivacyConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub audit: Option<AuditConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub session: Option<SessionConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub stress: Option<StressConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub benchmark: Option<BenchmarkConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub debug: Option<DebugConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub signing: Option<SigningConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub verification: Option<VerificationConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lockfile: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub strict: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub strict_validation: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub require_peer_review: Option<bool>,
}