// SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // 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(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, } // 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) } }