use super::{Marked, PickerState};
use crate::config_edit::FileIo;
use crate::config_edit::brazen::{BzRunner, ProviderRow, row_names};
use crate::model_pick::grammar;
pub(super) fn mark_roles(picker: &mut PickerState, providers_yaml: &str) -> Vec<Marked> {
let names = row_names(&provider_rows(picker));
let models = models_text(picker);
grammar::roles(providers_yaml)
.into_iter()
.map(|r| {
let fault = grammar::fault(&models, &names, &r.model);
(r, fault)
})
.collect()
}
pub(super) fn provider_rows(picker: &mut PickerState) -> Vec<ProviderRow> {
if picker.rows.is_none() {
picker.rows = Some(picker.bz_runner.providers());
}
picker.rows.clone().unwrap_or_default()
}
fn models_text(picker: &mut PickerState) -> String {
if picker.models_text.is_none() {
let raw = picker
.io
.read(&picker.lernie.models())
.ok()
.flatten()
.unwrap_or_default();
picker.models_text = Some(String::from_utf8_lossy(&raw).into_owned());
}
picker.models_text.clone().unwrap_or_default()
}