use std::collections::HashSet;
use std::sync::Arc;
use crate::brain::provider::Provider;
use crate::config::Config;
pub async fn resolve_eval_providers(config: &Config) -> Vec<Arc<dyn Provider>> {
let mut seen: HashSet<String> = HashSet::new();
let mut out: Vec<Arc<dyn Provider>> = Vec::new();
for raw in &config.agent.eval_providers {
let name = raw.trim();
if name.is_empty() || !seen.insert(name.to_string()) {
continue;
}
match crate::brain::provider::factory::create_provider_by_name(config, name).await {
Ok(provider) => {
tracing::info!(
"eval_providers: resolved '{}' -> model '{}'",
name,
provider.default_model()
);
out.push(provider);
}
Err(e) => {
tracing::warn!("eval_providers: skipping '{}' — {}", name, e);
}
}
}
out
}