Skip to main content

entrenar/yaml_mode/manifest/
monitoring.rs

1//! Monitoring Configuration
2//!
3//! Contains monitoring and tracking configuration types for training manifests.
4
5use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8/// Monitoring configuration (genchi genbutsu - go and see)
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct MonitoringConfig {
11    /// Terminal visualization
12    #[serde(default, skip_serializing_if = "Option::is_none")]
13    pub terminal: Option<TerminalMonitor>,
14
15    /// Experiment tracking
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub tracking: Option<TrackingConfig>,
18
19    /// System metrics
20    #[serde(default, skip_serializing_if = "Option::is_none")]
21    pub system: Option<SystemMonitorConfig>,
22
23    /// Alerts (Andon system)
24    #[serde(default, skip_serializing_if = "Option::is_none")]
25    pub alerts: Option<Vec<AlertConfig>>,
26
27    /// Drift detection configuration
28    #[serde(default, skip_serializing_if = "Option::is_none")]
29    pub drift_detection: Option<DriftDetectionConfig>,
30}
31
32/// Drift detection configuration
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct DriftDetectionConfig {
35    /// Whether drift detection is enabled
36    pub enabled: bool,
37
38    /// Path to baseline statistics
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub baseline: Option<String>,
41
42    /// Threshold for triggering drift alert (e.g., PSI threshold)
43    #[serde(default, skip_serializing_if = "Option::is_none")]
44    pub threshold: Option<f64>,
45
46    /// Window size for drift detection
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    pub window: Option<usize>,
49
50    /// Features to monitor for drift
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub features: Option<Vec<String>>,
53
54    /// Drift detection method (e.g., "psi", "ks", "wasserstein")
55    #[serde(default, skip_serializing_if = "Option::is_none")]
56    pub method: Option<String>,
57}
58
59/// Terminal monitoring configuration
60#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct TerminalMonitor {
62    /// Enable terminal monitoring
63    pub enabled: bool,
64
65    /// Refresh rate in ms
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    pub refresh_rate: Option<usize>,
68
69    /// Metrics to display
70    #[serde(default, skip_serializing_if = "Option::is_none")]
71    pub metrics: Option<Vec<String>>,
72
73    /// Charts configuration
74    #[serde(default, skip_serializing_if = "Option::is_none")]
75    pub charts: Option<Vec<ChartConfig>>,
76}
77
78/// Chart configuration
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct ChartConfig {
81    #[serde(rename = "type")]
82    pub chart_type: String,
83    #[serde(default, skip_serializing_if = "Option::is_none")]
84    pub metric: Option<String>,
85    #[serde(default, skip_serializing_if = "Option::is_none")]
86    pub window: Option<usize>,
87    #[serde(default, skip_serializing_if = "Option::is_none")]
88    pub show_eta: Option<bool>,
89}
90
91/// Experiment tracking configuration
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct TrackingConfig {
94    /// Enable tracking
95    pub enabled: bool,
96
97    /// Backend (trueno-db, mlflow, wandb, tensorboard)
98    #[serde(default, skip_serializing_if = "Option::is_none")]
99    pub backend: Option<String>,
100
101    /// Project name
102    #[serde(default, skip_serializing_if = "Option::is_none")]
103    pub project: Option<String>,
104
105    /// Experiment name (supports templates)
106    #[serde(default, skip_serializing_if = "Option::is_none")]
107    pub experiment: Option<String>,
108
109    /// Tags
110    #[serde(default, skip_serializing_if = "Option::is_none")]
111    pub tags: Option<HashMap<String, String>>,
112}
113
114/// System monitoring configuration
115#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct SystemMonitorConfig {
117    pub enabled: bool,
118    #[serde(default, skip_serializing_if = "Option::is_none")]
119    pub interval: Option<usize>,
120    #[serde(default, skip_serializing_if = "Option::is_none")]
121    pub metrics: Option<Vec<String>>,
122}
123
124/// Alert configuration (Andon system)
125#[derive(Debug, Clone, Serialize, Deserialize)]
126pub struct AlertConfig {
127    pub condition: String,
128    pub action: String,
129    pub message: String,
130}