1use anyhow::{Result, bail};
6use serde::{Deserialize, Serialize};
7use std::collections::{BTreeMap, HashSet};
8
9pub use wcore::config::provider::{ApiStandard, ProviderDef};
10
11#[derive(Debug, Clone, Serialize, Deserialize, Default)]
16pub struct ModelConfig {
17 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub embedding: Option<String>,
20}
21
22impl ModelConfig {
23 pub fn validate(providers: &BTreeMap<String, ProviderDef>) -> Result<()> {
25 let mut seen = HashSet::new();
26 for (name, def) in providers {
27 def.validate(name).map_err(|e| anyhow::anyhow!(e))?;
28 for model in &def.models {
29 if !seen.insert(model.clone()) {
30 bail!("duplicate model name '{model}' across providers");
31 }
32 }
33 }
34 Ok(())
35 }
36}