// SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // Adapted from mistral.rs // // MIT License // // Copyright (c) 2025 Eric Buehler // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. mod content; mod gguf_metadata; mod gguf_tokenizer; use strum::EnumString; use anyhow::{Context, Result}; pub(crate) use content::Content; pub(crate) use gguf_metadata::ContentConfig; pub use gguf_metadata::ModelConfigLike; pub(crate) use gguf_tokenizer::convert_gguf_to_hf_tokenizer; use std::str::FromStr; pub const GGUF_MULTI_FILE_DELIMITER: &str = " "; #[derive(Debug, EnumString, Clone, Copy, strum::Display)] #[strum(serialize_all = "lowercase")] pub enum GGUFArchitecture { Llama, Mpt, Gptneox, Gptj, Gpt2, Bloom, Falcon, Mamba, Rwkv, Phi2, Phi3, Starcoder2, Qwen2, Qwen3, Gemma3, } // Wraps from_str() for some convenience: // - Case-insensitive variant matching (TODO: is this desirable?) // - Customized error until potential upstream support: https://github.com/Peternator7/strum/issues/332 impl GGUFArchitecture { pub fn from_value + std::fmt::Display>(value: T) -> Result { Self::from_str(&value.as_ref().to_ascii_lowercase()) .with_context(|| format!("Unknown GGUF architecture `{value}`")) .map_err(anyhow::Error::msg) } }