use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AutoMLConfig {
pub enabled: bool,
pub tasks: Vec<AutoMLTask>,
pub model_selection: ModelSelectionConfig,
pub hyperparameter_optimization: HyperparameterOptimizationConfig,
pub deployment: ModelDeploymentConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AutoMLTask {
AnomalyDetection,
ForecastingOptimization,
AlertClassification,
ResourcePrediction,
CostOptimization,
PerformanceTuning,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelSelectionConfig {
pub criteria: Vec<SelectionCriterion>,
pub metrics: Vec<EvaluationMetric>,
pub cross_validation: AutoMLCrossValidationConfig,
pub model_families: Vec<ModelFamily>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SelectionCriterion {
Accuracy,
Precision,
Recall,
F1Score,
AUC,
Speed,
MemoryUsage,
Interpretability,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum EvaluationMetric {
Accuracy,
Precision,
Recall,
F1Score,
RocAuc,
MAE,
MSE,
RMSE,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AutoMLCrossValidationConfig {
pub method: CrossValidationMethod,
pub folds: u32,
pub stratified: bool,
pub seed: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CrossValidationMethod {
KFold,
StratifiedKFold,
TimeSeriesSplit,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelFamily {
LinearModels,
TreeModels,
EnsembleMethods,
NeuralNetworks,
SupportVectorMachines,
NaiveBayes,
KNearestNeighbors,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HyperparameterOptimizationConfig {
pub method: OptimizationMethod,
pub search_space: SearchSpaceConfig,
pub budget: OptimizationBudget,
pub early_stopping: EarlyStoppingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptimizationMethod {
RandomSearch,
GridSearch,
BayesianOptimization,
GeneticAlgorithm,
ParticleSwarmOptimization,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SearchSpaceConfig {
pub parameters: Vec<ParameterDefinition>,
pub constraints: Vec<ParameterConstraint>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParameterDefinition {
pub name: String,
pub param_type: ParameterType,
pub default: Option<String>,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ParameterType {
Integer { min: i64, max: i64 },
Float { min: f64, max: f64 },
Categorical { values: Vec<String> },
Boolean,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParameterConstraint {
pub constraint_type: ConstraintType,
pub parameters: Vec<String>,
pub expression: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ConstraintType {
LinearEquality,
LinearInequality,
NonLinear,
Conditional,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptimizationBudget {
pub max_evaluations: u32,
pub max_time: Duration,
pub max_parallel: u32,
pub resources: ResourceLimits,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceLimits {
pub cpu_cores: Option<u32>,
pub memory_gb: Option<u32>,
pub gpu_count: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EarlyStoppingConfig {
pub enabled: bool,
pub patience: u32,
pub min_improvement: f64,
pub evaluation_frequency: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelDeploymentConfig {
pub strategy: DeploymentStrategy,
pub versioning: VersioningConfig,
pub monitoring: ModelMonitoringConfig,
pub rollback: RollbackConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DeploymentStrategy {
BlueGreen,
Canary,
RollingUpdate,
Immediate,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VersioningConfig {
pub scheme: VersionScheme,
pub registry: ModelRegistryConfig,
pub artifacts: ArtifactStorageConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VersionScheme {
Semantic,
Sequential,
Timestamp,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelRegistryConfig {
pub registry_type: RegistryType,
pub connection: RegistryConnection,
pub metadata: MetadataConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RegistryType {
MLflow,
ModelDB,
KubeflowPipelines,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegistryConnection {
pub url: String,
pub auth: AuthConfig,
pub timeout: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthConfig {
pub method: AuthMethod,
pub credentials: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuthMethod {
Token,
BasicAuth,
OAuth2,
Certificate,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetadataConfig {
pub track_hyperparameters: bool,
pub track_metrics: bool,
pub track_artifacts: bool,
pub custom_fields: Vec<MetadataField>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetadataField {
pub name: String,
pub field_type: MetadataFieldType,
pub required: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MetadataFieldType {
String,
Number,
Boolean,
Date,
JSON,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArtifactStorageConfig {
pub backend: StorageBackend,
pub path: String,
pub compression: CompressionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum StorageBackend {
Local,
S3,
GCS,
Azure,
HDFS,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompressionConfig {
pub enabled: bool,
pub algorithm: CompressionAlgorithm,
pub level: u8,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompressionAlgorithm {
Gzip,
Lz4,
Zstd,
Bzip2,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ModelMonitoringConfig {
pub performance: PerformanceMonitoringConfig,
pub data_drift: DataDriftConfig,
pub model_drift: ModelDriftConfig,
pub alerts: ModelAlertConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceMonitoringConfig {
pub metrics: Vec<PerformanceMetric>,
pub frequency: Duration,
pub thresholds: PerformanceThresholds,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PerformanceMetric {
Accuracy,
Precision,
Recall,
F1Score,
Latency,
Throughput,
MemoryUsage,
CPUUsage,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceThresholds {
pub accuracy: Option<f64>,
pub latency_ms: Option<f64>,
pub throughput: Option<f64>,
pub memory_mb: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataDriftConfig {
pub enabled: bool,
pub methods: Vec<DriftDetectionMethod>,
pub frequency: Duration,
pub reference_window: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DriftDetectionMethod {
KolmogorovSmirnov,
ChiSquare,
PopulationStabilityIndex,
JensenShannonDivergence,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelDriftConfig {
pub enabled: bool,
pub threshold: f64,
pub window: Duration,
pub retrain_trigger: RetrainTrigger,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RetrainTrigger {
PerformanceDegradation,
DataDrift,
TimeBased,
Manual,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelAlertConfig {
pub types: Vec<ModelAlertType>,
pub channels: Vec<String>,
pub thresholds: AlertThresholds,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelAlertType {
PerformanceDegradation,
DataDrift,
ModelDrift,
PredictionBias,
ServiceUnavailable,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertThresholds {
pub performance_degradation: f64,
pub data_drift: f64,
pub model_drift: f64,
pub bias: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackConfig {
pub auto_rollback: bool,
pub triggers: Vec<RollbackTrigger>,
pub strategy: RollbackStrategy,
pub timeout: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RollbackTrigger {
PerformanceDegradation,
ErrorRateIncrease,
LatencyIncrease,
Manual,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RollbackStrategy {
PreviousVersion,
StableVersion,
SpecificVersion,
Custom(String),
}
impl Default for ModelSelectionConfig {
fn default() -> Self {
Self {
criteria: vec![SelectionCriterion::Accuracy],
metrics: vec![EvaluationMetric::Accuracy],
cross_validation: AutoMLCrossValidationConfig::default(),
model_families: vec![ModelFamily::LinearModels, ModelFamily::TreeModels],
}
}
}
impl Default for AutoMLCrossValidationConfig {
fn default() -> Self {
Self {
method: CrossValidationMethod::KFold,
folds: 5,
stratified: true,
seed: Some(42),
}
}
}
impl Default for HyperparameterOptimizationConfig {
fn default() -> Self {
Self {
method: OptimizationMethod::BayesianOptimization,
search_space: SearchSpaceConfig::default(),
budget: OptimizationBudget::default(),
early_stopping: EarlyStoppingConfig::default(),
}
}
}
impl Default for OptimizationBudget {
fn default() -> Self {
Self {
max_evaluations: 100,
max_time: Duration::from_secs(3600), max_parallel: 4,
resources: ResourceLimits::default(),
}
}
}
impl Default for ResourceLimits {
fn default() -> Self {
Self {
cpu_cores: Some(4),
memory_gb: Some(8),
gpu_count: None,
}
}
}
impl Default for EarlyStoppingConfig {
fn default() -> Self {
Self {
enabled: true,
patience: 10,
min_improvement: 0.001,
evaluation_frequency: 5,
}
}
}
impl Default for ModelDeploymentConfig {
fn default() -> Self {
Self {
strategy: DeploymentStrategy::RollingUpdate,
versioning: VersioningConfig::default(),
monitoring: ModelMonitoringConfig::default(),
rollback: RollbackConfig::default(),
}
}
}
impl Default for VersioningConfig {
fn default() -> Self {
Self {
scheme: VersionScheme::Semantic,
registry: ModelRegistryConfig::default(),
artifacts: ArtifactStorageConfig::default(),
}
}
}
impl Default for ModelRegistryConfig {
fn default() -> Self {
Self {
registry_type: RegistryType::MLflow,
connection: RegistryConnection::default(),
metadata: MetadataConfig::default(),
}
}
}
impl Default for RegistryConnection {
fn default() -> Self {
Self {
url: "http://localhost:5000".to_string(),
auth: AuthConfig::default(),
timeout: Duration::from_secs(30),
}
}
}
impl Default for AuthConfig {
fn default() -> Self {
Self {
method: AuthMethod::Token,
credentials: std::collections::HashMap::new(),
}
}
}
impl Default for MetadataConfig {
fn default() -> Self {
Self {
track_hyperparameters: true,
track_metrics: true,
track_artifacts: true,
custom_fields: vec![],
}
}
}
impl Default for ArtifactStorageConfig {
fn default() -> Self {
Self {
backend: StorageBackend::Local,
path: "./models".to_string(),
compression: CompressionConfig::default(),
}
}
}
impl Default for CompressionConfig {
fn default() -> Self {
Self {
enabled: true,
algorithm: CompressionAlgorithm::Gzip,
level: 6,
}
}
}
impl Default for PerformanceMonitoringConfig {
fn default() -> Self {
Self {
metrics: vec![PerformanceMetric::Accuracy, PerformanceMetric::Latency],
frequency: Duration::from_secs(300), thresholds: PerformanceThresholds::default(),
}
}
}
impl Default for PerformanceThresholds {
fn default() -> Self {
Self {
accuracy: Some(0.85),
latency_ms: Some(1000.0),
throughput: Some(100.0),
memory_mb: Some(1024.0),
}
}
}
impl Default for DataDriftConfig {
fn default() -> Self {
Self {
enabled: false,
methods: vec![DriftDetectionMethod::KolmogorovSmirnov],
frequency: Duration::from_secs(3600), reference_window: Duration::from_secs(86400 * 7), }
}
}
impl Default for ModelDriftConfig {
fn default() -> Self {
Self {
enabled: false,
threshold: 0.1,
window: Duration::from_secs(86400), retrain_trigger: RetrainTrigger::PerformanceDegradation,
}
}
}
impl Default for ModelAlertConfig {
fn default() -> Self {
Self {
types: vec![ModelAlertType::PerformanceDegradation],
channels: vec!["email".to_string()],
thresholds: AlertThresholds::default(),
}
}
}
impl Default for AlertThresholds {
fn default() -> Self {
Self {
performance_degradation: 0.05,
data_drift: 0.1,
model_drift: 0.1,
bias: 0.05,
}
}
}
impl Default for RollbackConfig {
fn default() -> Self {
Self {
auto_rollback: false,
triggers: vec![RollbackTrigger::PerformanceDegradation],
strategy: RollbackStrategy::PreviousVersion,
timeout: Duration::from_secs(300), }
}
}