anya_core/ml/
agent_system.rs1use crate::ml::{AgentChecker, MLConfig, MLSystem};
5use crate::AnyaResult;
6use std::sync::Arc;
7
8pub struct MLAgentSystem {
10 ml_system: Arc<MLSystem>,
12 agent_checker: Arc<AgentChecker>,
14}
15
16impl MLAgentSystem {
17 pub async fn init(config: MLConfig) -> AnyaResult<Self> {
19 let ml_system = MLSystem::new(config)?;
21
22 let agent_checker = crate::ml::create_agent_checker();
24
25 Ok(Self {
26 ml_system: Arc::new(ml_system),
27 agent_checker: Arc::new(agent_checker),
28 })
29 }
30
31 pub fn ml_system(&self) -> Arc<MLSystem> {
33 self.ml_system.clone()
34 }
35
36 pub fn agent_checker(&self) -> Arc<AgentChecker> {
38 self.agent_checker.clone()
39 }
40
41 pub async fn check_health(&self) -> AnyaResult<f64> {
43 let metrics = self.ml_system.get_health_metrics();
45
46 let sum: f64 = metrics.values().sum();
48 let avg = if metrics.is_empty() {
49 0.0
50 } else {
51 sum / metrics.len() as f64
52 };
53
54 Ok(avg)
55 }
56
57 pub async fn register_component(
60 &self,
61 _name: &str,
62 _status: crate::ml::ComponentStatus,
63 ) -> AnyaResult<()> {
64 let _agent_checker = self.agent_checker.clone();
65 Ok(())
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73
74 #[tokio::test]
75 async fn test_agent_system_init() -> AnyaResult<()> {
76 let config = MLConfig::default();
77 let agent_system = MLAgentSystem::init(config).await?;
78
79 let health = agent_system.check_health().await?;
80 assert!((0.0..=1.0).contains(&health));
81
82 Ok(())
83 }
84}