use super::SessionManagerAgent;
use crate::core::sm::providers::SmModelTier;
#[derive(Debug, Clone, PartialEq, serde::Serialize)]
pub struct SmHealth {
pub ok: bool,
pub provider: String,
pub degraded: bool,
pub model_tiers: SmModelTiers,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize)]
pub struct SmModelTiers {
pub orchestration: String,
pub summary: String,
pub compaction: String,
}
impl SessionManagerAgent {
pub async fn health(&self) -> SmHealth {
let model_tiers = self.model_tiers();
let Some(runtime) = self.runtime.as_ref() else {
return SmHealth {
ok: false,
provider: "none".to_string(),
degraded: true,
model_tiers,
};
};
match runtime
.resolver
.resolve(&self.config.inference, SmModelTier::Orchestration)
.await
{
Ok(call) => SmHealth {
ok: true,
provider: call.kind.name().to_string(),
degraded: false,
model_tiers,
},
Err(_) => SmHealth {
ok: false,
provider: "none".to_string(),
degraded: true,
model_tiers,
},
}
}
fn model_tiers(&self) -> SmModelTiers {
use crate::core::sm::providers::resolve_tier_model;
let tier = |t| resolve_tier_model(&self.config.inference, t).unwrap_or_default();
SmModelTiers {
orchestration: tier(SmModelTier::Orchestration),
summary: tier(SmModelTier::Summary),
compaction: tier(SmModelTier::Compaction),
}
}
}
#[cfg(test)]
#[path = "health_tests.rs"]
mod health_tests;