use anyhow::{Result, bail};
use serde::{Deserialize, Serialize};
use std::collections::{BTreeMap, HashSet};
pub use wcore::config::provider::{ApiStandard, ProviderDef};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ModelConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub embedding: Option<String>,
}
impl ModelConfig {
pub fn validate(providers: &BTreeMap<String, ProviderDef>) -> Result<()> {
let mut seen = HashSet::new();
for (name, def) in providers {
def.validate(name).map_err(|e| anyhow::anyhow!(e))?;
for model in &def.models {
if !seen.insert(model.clone()) {
bail!("duplicate model name '{model}' across providers");
}
}
}
Ok(())
}
}