pub mod nvidia;
pub mod apple;
pub mod ollama;
#[derive(Debug, Clone, Default)]
pub struct HardwareSnapshot {
pub gpu_name: String,
pub gpu_count: u32,
pub gpu_util_pct: u32,
pub vram_total_mb: u64,
pub vram_used_mb: u64,
pub power_w: f64,
pub power_limit_w: f64,
pub temp_c: u32,
}
#[derive(Debug, Clone)]
pub struct ModelInfo {
pub name: String,
pub vram_mb: u64,
pub tokens_per_sec: f64,
pub total_tokens: u64,
}
pub async fn poll_hardware() -> HardwareSnapshot {
if let Some(s) = nvidia::poll() {
return s;
}
#[cfg(target_os = "macos")]
if let Some(s) = apple::poll() {
return s;
}
HardwareSnapshot::default()
}
pub async fn poll_ollama(base_url: &str, sink: Option<&crate::proxy::Sink>) -> Vec<ModelInfo> {
ollama::poll(base_url, sink).await
}