babel 0.0.11

Provide Rust enums for Groq, SambaNova, Openrouter's llm model names.
Documentation
pub trait Model {
    fn model_id(&self) -> &'static str;
}

pub trait Provider {
    type ModelType: Model;
    fn provider_name() -> &'static str;
}

macro_rules! define_provider_models {
    ($provider:ident, $enum_name:ident, {
        $(($variant:ident, $value:expr)),*
    }) => {
        // Define model enum with Debug derive
        #[derive(Debug, Clone, Copy)]
        pub enum $enum_name {
            $($variant),*
        }

        // Implement Model trait for enum
        impl Model for $enum_name {
            fn model_id(&self) -> &'static str {
                match self {
                    $(Self::$variant => $value),*
                }
            }
        }
    }
}

pub(crate) use define_provider_models;