use harness::{Harness, Error, OpenHarness};
pub fn largest_installed(harness: &OpenHarness) -> Result<Option<String>, Error> {
let mut installed = harness.list_installed_models()?;
installed.sort_by(|a, b| {
billions(&a.parameter_size)
.total_cmp(&billions(&b.parameter_size))
.then(a.size.cmp(&b.size))
});
Ok(installed.pop().map(|model| model.name))
}
fn billions(parameter_size: &Option<String>) -> f64 {
let Some(raw) = parameter_size else { return 0.0 };
let text = raw.trim();
let (digits, scale) = match text.chars().last() {
Some('B' | 'b') => (&text[..text.len() - 1], 1.0),
Some('M' | 'm') => (&text[..text.len() - 1], 0.001),
_ => (text, 1.0),
};
digits.trim().parse::<f64>().unwrap_or(0.0) * scale
}