use crate::ml::{AgentChecker, MLConfig, MLSystem};
use crate::AnyaResult;
use std::sync::Arc;
pub struct MLAgentSystem {
ml_system: Arc<MLSystem>,
agent_checker: Arc<AgentChecker>,
}
impl MLAgentSystem {
pub async fn init(config: MLConfig) -> AnyaResult<Self> {
let ml_system = MLSystem::new(config)?;
let agent_checker = crate::ml::create_agent_checker();
Ok(Self {
ml_system: Arc::new(ml_system),
agent_checker: Arc::new(agent_checker),
})
}
pub fn ml_system(&self) -> Arc<MLSystem> {
self.ml_system.clone()
}
pub fn agent_checker(&self) -> Arc<AgentChecker> {
self.agent_checker.clone()
}
pub async fn check_health(&self) -> AnyaResult<f64> {
let metrics = self.ml_system.get_health_metrics();
let sum: f64 = metrics.values().sum();
let avg = if metrics.is_empty() {
0.0
} else {
sum / metrics.len() as f64
};
Ok(avg)
}
pub async fn register_component(
&self,
_name: &str,
_status: crate::ml::ComponentStatus,
) -> AnyaResult<()> {
let _agent_checker = self.agent_checker.clone();
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_agent_system_init() -> AnyaResult<()> {
let config = MLConfig::default();
let agent_system = MLAgentSystem::init(config).await?;
let health = agent_system.check_health().await?;
assert!((0.0..=1.0).contains(&health));
Ok(())
}
}