litellm-rs 0.8.2

A high-performance AI Gateway written in Rust, providing OpenAI-compatible APIs with intelligent routing, load balancing, and enterprise features
Documentation
use std::collections::{HashMap, HashSet};

use super::error::RouterError;

pub(super) fn normalize_model_aliases(
    model_aliases: &HashMap<String, String>,
    canonical_models: &HashSet<String>,
) -> Result<HashMap<String, String>, RouterError> {
    let mut alias_names = model_aliases.keys().map(String::as_str).collect::<Vec<_>>();
    alias_names.sort_unstable();

    for alias in &alias_names {
        if canonical_models.contains(*alias) {
            return Err(RouterError::InvalidConfiguration(format!(
                "model alias '{alias}' collides with an enabled canonical model"
            )));
        }
    }

    let mut normalized = HashMap::with_capacity(model_aliases.len());
    for alias in alias_names {
        let mut target = &model_aliases[alias];
        while let Some(next) = model_aliases.get(target) {
            target = next;
        }
        if !canonical_models.contains(target) {
            return Err(RouterError::InvalidConfiguration(format!(
                "model alias '{alias}' resolves to unavailable model '{target}'"
            )));
        }
        normalized.insert(alias.to_string(), target.clone());
    }
    Ok(normalized)
}