diff --git a/conversion/afmoe.py b/conversion/afmoe.py index 5e66a51da616..844925dca7be 100644 --- a/conversion/afmoe.py +++ b/conversion/afmoe.py @@ -13,6 +13,7 @@ @ModelBase.register("AfmoeForCausalLM") +@ModelBase.example("arcee-ai/Trinity-Large-Thinking") class AfmoeModel(LlamaModel): model_arch = gguf.MODEL_ARCH.AFMOE diff --git a/conversion/arctic.py b/conversion/arctic.py index 775cacaab9f5..843e24a7b9ed 100644 --- a/conversion/arctic.py +++ b/conversion/arctic.py @@ -16,6 +16,7 @@ @ModelBase.register("ArcticForCausalLM") +@ModelBase.example("Snowflake/snowflake-arctic-instruct") class ArcticModel(TextModel): model_arch = gguf.MODEL_ARCH.ARCTIC diff --git a/conversion/baichuan.py b/conversion/baichuan.py index 4cf34057cd9a..769bdd56780e 100644 --- a/conversion/baichuan.py +++ b/conversion/baichuan.py @@ -9,6 +9,7 @@ @ModelBase.register("BaichuanForCausalLM", "BaiChuanForCausalLM") +@ModelBase.example("baichuan-inc/Baichuan2-7B-Chat", "baichuan-inc/Baichuan-7B") class BaichuanModel(TextModel): model_arch = gguf.MODEL_ARCH.BAICHUAN diff --git a/conversion/bailingmoe.py b/conversion/bailingmoe.py index 2c6425cb6436..351be1df1758 100644 --- a/conversion/bailingmoe.py +++ b/conversion/bailingmoe.py @@ -11,6 +11,7 @@ @ModelBase.register("BailingMoeForCausalLM") +@ModelBase.example("inclusionAI/Ling-lite") class BailingMoeModel(TextModel): model_arch = gguf.MODEL_ARCH.BAILINGMOE @@ -108,6 +109,7 @@ def prepare_tensors(self): @ModelBase.register("BailingMoeV2ForCausalLM") +@ModelBase.example("inclusionAI/Ling-mini-2.0") class BailingMoeV2Model(TextModel): model_arch = gguf.MODEL_ARCH.BAILINGMOE2 @@ -189,6 +191,7 @@ def prepare_tensors(self): @ModelBase.register("SarvamMoEForCausalLM", "modeling_sarvam_moe.SarvamMoEForCausalLM") +@ModelBase.example("sarvamai/sarvam-30b") class SarvamMoEModel(BailingMoeV2Model): model_arch = gguf.MODEL_ARCH.BAILINGMOE2 # Sarvam-MoE shares the BailingMoeV2 architecture; only differences: diff --git a/conversion/bailingmoe3.py b/conversion/bailingmoe3.py index 3b0501bb2ad2..20bba23e51c6 100644 --- a/conversion/bailingmoe3.py +++ b/conversion/bailingmoe3.py @@ -13,6 +13,7 @@ @ModelBase.register("BailingMoeV3ForCausalLM") +@ModelBase.example("inclusionAI/Ling-3.0-tiny", "inclusionAI/Ling-3.0-flash") class BailingMoeV3Model(TextModel): model_arch = gguf.MODEL_ARCH.BAILINGMOE3 supports_mtp_export = True diff --git a/conversion/base.py b/conversion/base.py index 4f4fbca347aa..56547ace009f 100644 --- a/conversion/base.py +++ b/conversion/base.py @@ -1149,6 +1149,14 @@ def func(modelcls: AnyModel) -> AnyModel: return modelcls return func + @classmethod + def example(cls, *hf_repos: str) -> Callable[[AnyModel], AnyModel]: + del hf_repos # unused + + def func(modelcls: AnyModel) -> AnyModel: + return modelcls + return func + @classmethod def print_registered_models(cls): for model_type, model_classes in cls._model_classes.items(): diff --git a/conversion/bert.py b/conversion/bert.py index 0d25d0d62df5..8ea6c42dc619 100644 --- a/conversion/bert.py +++ b/conversion/bert.py @@ -15,6 +15,7 @@ @ModelBase.register("BertModel", "BertForMaskedLM", "CamembertModel", "BertForSequenceClassification") +@ModelBase.example("BAAI/bge-small-en-v1.5", "dangvantuan/sentence-camembert-base") class BertModel(TextModel): model_arch = gguf.MODEL_ARCH.BERT @@ -240,6 +241,7 @@ def _xlmroberta_set_vocab(self) -> None: @ModelBase.register("DistilBertModel", "DistilBertForMaskedLM", "DistilBertForSequenceClassification") +@ModelBase.example("distilbert/distilbert-base-uncased") class DistilBertModel(BertModel): model_arch = gguf.MODEL_ARCH.BERT @@ -263,6 +265,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("RobertaModel", "RobertaForSequenceClassification") +@ModelBase.example("sentence-transformers/stsb-roberta-base") class RobertaModel(BertModel): model_arch = gguf.MODEL_ARCH.BERT @@ -312,6 +315,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("NomicBertModel") +@ModelBase.example("nomic-ai/nomic-embed-text-v1.5") class NomicBertModel(BertModel): model_arch = gguf.MODEL_ARCH.BERT @@ -400,6 +404,7 @@ def _is_tokenizer_xlmroberta(self) -> bool: @ModelBase.register("NeoBERT", "NeoBERTLMHead", "NeoBERTForSequenceClassification") +@ModelBase.example("chandar-lab/NeoBERT") class NeoBert(BertModel): model_arch = gguf.MODEL_ARCH.NEO_BERT @@ -431,6 +436,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("EuroBertModel", "JinaEmbeddingsV5Model") +@ModelBase.example("hf-tiny-v2/tiny-random-EuroBertModel", "jinaai/jina-embeddings-v5-text-nano") class EuroBertModel(TextModel): model_arch = gguf.MODEL_ARCH.EUROBERT @@ -459,6 +465,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("XLMRobertaModel", "XLMRobertaForSequenceClassification") +@ModelBase.example("BAAI/bge-m3") class XLMRobertaModel(BertModel): model_arch = gguf.MODEL_ARCH.BERT _lora_files = {} @@ -561,6 +568,7 @@ def write(self): @ModelBase.register("JinaBertModel", "JinaBertForMaskedLM") +@ModelBase.example("jinaai/jina-embeddings-v2-base-en") class JinaBertV2Model(BertModel): model_arch = gguf.MODEL_ARCH.JINA_BERT_V2 @@ -588,6 +596,7 @@ def set_vocab(self): @ModelBase.register("ModernBertModel", "ModernBertForMaskedLM", "ModernBertForSequenceClassification") +@ModelBase.example("answerdotai/ModernBERT-base") class ModernBertModel(BertModel): model_arch = gguf.MODEL_ARCH.MODERN_BERT diff --git a/conversion/bitnet.py b/conversion/bitnet.py index 0c2baee87608..82bcadaf9a69 100644 --- a/conversion/bitnet.py +++ b/conversion/bitnet.py @@ -9,6 +9,7 @@ @ModelBase.register("BitnetForCausalLM", "BitNetForCausalLM") +@ModelBase.example("microsoft/bitnet-b1.58-2B-4T") class BitnetModel(TextModel): model_arch = gguf.MODEL_ARCH.BITNET diff --git a/conversion/bloom.py b/conversion/bloom.py index d98edf6d500d..9654cd4a0f51 100644 --- a/conversion/bloom.py +++ b/conversion/bloom.py @@ -13,6 +13,7 @@ @ModelBase.register("BloomForCausalLM", "BloomModel") +@ModelBase.example("bigscience/bloom-560m") class BloomModel(TextModel): model_arch = gguf.MODEL_ARCH.BLOOM diff --git a/conversion/chameleon.py b/conversion/chameleon.py index a996bfa53cfc..8f2065df6634 100644 --- a/conversion/chameleon.py +++ b/conversion/chameleon.py @@ -12,6 +12,8 @@ @ModelBase.register("ChameleonForConditionalGeneration") @ModelBase.register("ChameleonForCausalLM") # obsolete +# [TAG_HF_EXAMPLE_GATED] facebook/chameleon-7b is gated +# [TAG_HF_EXAMPLE_MISSING] class ChameleonModel(TextModel): model_arch = gguf.MODEL_ARCH.CHAMELEON diff --git a/conversion/chatglm.py b/conversion/chatglm.py index d6385503877c..9b902dae30c4 100644 --- a/conversion/chatglm.py +++ b/conversion/chatglm.py @@ -9,6 +9,7 @@ @ModelBase.register("GlmForCausalLM", "ChatGLMModel", "ChatGLMForConditionalGeneration") +@ModelBase.example("THUDM/chatglm3-6b", "zai-org/glm-4-9b-chat-hf") class ChatGLMModel(TextModel): model_arch = gguf.MODEL_ARCH.CHATGLM diff --git a/conversion/codeshell.py b/conversion/codeshell.py index 8bfc3178d46b..1c7f1129b549 100644 --- a/conversion/codeshell.py +++ b/conversion/codeshell.py @@ -4,6 +4,7 @@ @ModelBase.register("CodeShellForCausalLM") +@ModelBase.example("WisdomShell/CodeShell-7B") class CodeShellModel(TextModel): model_arch = gguf.MODEL_ARCH.CODESHELL diff --git a/conversion/cogvlm.py b/conversion/cogvlm.py index d92df55d46ba..13c314441bfa 100644 --- a/conversion/cogvlm.py +++ b/conversion/cogvlm.py @@ -11,6 +11,7 @@ @ModelBase.register("CogVLMForCausalLM") +@ModelBase.example("THUDM/cogvlm2-llama3-chat-19B", "THUDM/cogvlm-chat-hf") class CogVLMVisionModel(MmprojModel): def set_gguf_parameters(self): @@ -29,5 +30,6 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("CogVLMForCausalLM") +@ModelBase.example("THUDM/cogvlm2-llama3-chat-19B", "THUDM/cogvlm-chat-hf") class CogVLMModel(LlamaModel): model_arch = gguf.MODEL_ARCH.COGVLM diff --git a/conversion/command_r.py b/conversion/command_r.py index 118565c66973..971f93ebdf12 100644 --- a/conversion/command_r.py +++ b/conversion/command_r.py @@ -12,6 +12,8 @@ @ModelBase.register("CohereForCausalLM") +# [TAG_HF_EXAMPLE_GATED] CohereLabs/c4ai-command-r-v01 is gated +# [TAG_HF_EXAMPLE_MISSING] class CommandR2Model(TextModel): model_arch = gguf.MODEL_ARCH.COMMAND_R @@ -30,6 +32,8 @@ def set_gguf_parameters(self): @ModelBase.register("Cohere2ForCausalLM") +# [TAG_HF_EXAMPLE_GATED] CohereLabs/c4ai-command-r7b-12-2024 is gated +@ModelBase.example("hf-tiny-v2/tiny-random-Cohere2ForCausalLM") class Cohere2Model(TextModel): model_arch = gguf.MODEL_ARCH.COHERE2 @@ -59,6 +63,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Cohere2MoeForCausalLM") +@ModelBase.example("CohereLabs/North-Mini-Code-1.0") class Cohere2MoeModel(TextModel): model_arch = gguf.MODEL_ARCH.COHERE2MOE _n_main_layers: int | None = None diff --git a/conversion/dbrx.py b/conversion/dbrx.py index 207ebcb8931b..d37ce83e7845 100644 --- a/conversion/dbrx.py +++ b/conversion/dbrx.py @@ -9,6 +9,7 @@ @ModelBase.register("DbrxForCausalLM") +@ModelBase.example("alpindale/dbrx-instruct") class DbrxModel(TextModel): model_arch = gguf.MODEL_ARCH.DBRX diff --git a/conversion/deci.py b/conversion/deci.py index be446eefa637..2ccaa92a98ef 100644 --- a/conversion/deci.py +++ b/conversion/deci.py @@ -13,6 +13,7 @@ @ModelBase.register("DeciLMForCausalLM") +@ModelBase.example("nvidia/Llama-3_1-Nemotron-51B-Instruct", "Deci/DeciLM-7B") class DeciModel(TextModel): model_arch = gguf.MODEL_ARCH.DECI diff --git a/conversion/deepseek.py b/conversion/deepseek.py index dbfa96c2ee22..225f8645d86f 100644 --- a/conversion/deepseek.py +++ b/conversion/deepseek.py @@ -18,6 +18,7 @@ @ModelBase.register("DeepseekOCRForCausalLM") +@ModelBase.example("deepseek-ai/DeepSeek-OCR") class DeepseekOCRVisionModel(MmprojModel): # HF dynamic_preprocess() max_num, which differs per model preproc_max_tiles = 9 @@ -100,11 +101,13 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("UnlimitedOCRForCausalLM") +@ModelBase.example("baidu/Unlimited-OCR") class UnlimitedOCRVisionModel(DeepseekOCRVisionModel): preproc_max_tiles = 32 @ModelBase.register("DeepseekOCR2ForCausalLM") +@ModelBase.example("deepseek-ai/DeepSeek-OCR-2") class DeepseekOCR2VisionModel(DeepseekOCRVisionModel): preproc_max_tiles = 6 @@ -134,6 +137,7 @@ def get_vision_config(self) -> dict[str, Any]: @ModelBase.register("DeepseekForCausalLM") +@ModelBase.example("deepseek-ai/deepseek-moe-16b-chat") class DeepseekModel(TextModel): model_arch = gguf.MODEL_ARCH.DEEPSEEK @@ -228,6 +232,7 @@ def prepare_tensors(self): "YoutuForCausalLM", "YoutuVLForConditionalGeneration", ) +@ModelBase.example("deepseek-ai/DeepSeek-V2-Lite", "deepseek-ai/DeepSeek-V3") class DeepseekV2Model(TextModel): model_arch = gguf.MODEL_ARCH.DEEPSEEK2 @@ -457,6 +462,7 @@ def prepare_tensors(self): @ModelBase.register("DeepseekV32ForCausalLM") +@ModelBase.example("deepseek-ai/DeepSeek-V3.2-Exp") class DeepseekV32Model(DeepseekV2Model): model_arch = gguf.MODEL_ARCH.DEEPSEEK32 skip_mtp = False @@ -517,6 +523,7 @@ def set_gguf_parameters(self): @ModelBase.register("DeepseekV4ForCausalLM") +@ModelBase.example("deepseek-ai/DeepSeek-V4-Flash-Base") class DeepseekV4Model(TextModel): model_arch = gguf.MODEL_ARCH.DEEPSEEK4 supports_mtp_export = True @@ -911,6 +918,7 @@ def prepare_tensors(self): @ModelBase.register("DeepseekV4DSparkModel") +@ModelBase.example("deepseek-ai/DeepSeek-V4-Flash-DSpark") class DeepseekV4DSparkModel(DeepseekV4Model): model_arch = gguf.MODEL_ARCH.DFLASH diff --git a/conversion/dots1.py b/conversion/dots1.py index 7ac299a6e656..ffa3b6db4459 100644 --- a/conversion/dots1.py +++ b/conversion/dots1.py @@ -11,6 +11,7 @@ @ModelBase.register("Dots1ForCausalLM") +@ModelBase.example("rednote-hilab/dots.llm1.inst") class Dots1Model(Qwen2MoeModel): model_arch = gguf.MODEL_ARCH.DOTS1 diff --git a/conversion/dotsocr.py b/conversion/dotsocr.py index f87f62abde98..ace6aa9a13d5 100644 --- a/conversion/dotsocr.py +++ b/conversion/dotsocr.py @@ -9,6 +9,7 @@ @ModelBase.register("DotsOCRForCausalLM") +@ModelBase.example("rednote-hilab/dots.ocr") class DotsOCRVisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/conversion/dream.py b/conversion/dream.py index 459e8d46afb2..14f25404d67f 100644 --- a/conversion/dream.py +++ b/conversion/dream.py @@ -9,6 +9,7 @@ @ModelBase.register("DreamModel") +@ModelBase.example("Dream-org/Dream-v0-Instruct-7B") class DreamModel(TextModel): model_arch = gguf.MODEL_ARCH.DREAM diff --git a/conversion/ernie.py b/conversion/ernie.py index aa8a3bc8ee58..3c4226a2598a 100644 --- a/conversion/ernie.py +++ b/conversion/ernie.py @@ -15,6 +15,7 @@ @ModelBase.register("Ernie4_5_ForCausalLM", "Ernie4_5ForCausalLM") +@ModelBase.example("baidu/ERNIE-4.5-0.3B-PT") class Ernie4_5Model(TextModel): model_arch = gguf.MODEL_ARCH.ERNIE4_5 @@ -73,6 +74,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Ernie4_5_MoeForCausalLM") +@ModelBase.example("baidu/ERNIE-4.5-21B-A3B-PT") class Ernie4_5MoeModel(Ernie4_5Model): model_arch = gguf.MODEL_ARCH.ERNIE4_5_MOE _experts: list[dict[str, Tensor]] | None = None @@ -156,11 +158,13 @@ def prepare_tensors(self): @ModelBase.register("PaddleOCRVLForConditionalGeneration") +@ModelBase.example("PaddlePaddle/PaddleOCR-VL") class PaddleOCRModel(Ernie4_5Model): model_arch = gguf.MODEL_ARCH.PADDLEOCR @ModelBase.register("PaddleOCRVisionModel") +@ModelBase.example("PaddlePaddle/PaddleOCR-VL") class PaddleOCRVisionModel(MmprojModel): # PaddleOCR-VL uses a modified version of Siglip min_pixels: int = 0 diff --git a/conversion/exaone.py b/conversion/exaone.py index 1cd2244dbc3d..0919d2ffafe8 100644 --- a/conversion/exaone.py +++ b/conversion/exaone.py @@ -15,6 +15,7 @@ @ModelBase.register("ExaoneForCausalLM") +@ModelBase.example("LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct") class ExaoneModel(TextModel): model_arch = gguf.MODEL_ARCH.EXAONE @@ -60,6 +61,7 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: @ModelBase.register("Exaone4ForCausalLM") +@ModelBase.example("LGAI-EXAONE/EXAONE-4.0-32B") class Exaone4Model(TextModel): model_arch = gguf.MODEL_ARCH.EXAONE4 @@ -126,6 +128,7 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: # note: transformers >= 5.1 renamed the class to "ExaoneMoeForCausalLM" (lowercase 'e'), # so accept both spellings - LG AI have updated the configs of already-released models @ModelBase.register("ExaoneMoEForCausalLM", "ExaoneMoeForCausalLM") +@ModelBase.example("LGAI-EXAONE/K-EXAONE-236B-A23B") class ExaoneMoEModel(Exaone4Model): model_arch = gguf.MODEL_ARCH.EXAONE_MOE @@ -214,6 +217,7 @@ def prepare_tensors(self): @ModelBase.register("Exaone4_5_ForConditionalGeneration") +@ModelBase.example("LGAI-EXAONE/EXAONE-4.5-33B") class Exaone4_5_TextModel(Exaone4Model): """Text tower of EXAONE 4.5; Tensors match EXAONE4""" @@ -267,6 +271,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Exaone4_5_ForConditionalGeneration") +@ModelBase.example("LGAI-EXAONE/EXAONE-4.5-33B") class Exaone4_5VisionModel(Qwen2VLVisionModel): """Vision tower for EXAONE 4.5; Qwen2-VL-style ViT (GQA) + patch merger""" diff --git a/conversion/falcon.py b/conversion/falcon.py index 085fd4cd33ff..2c55511a09b4 100644 --- a/conversion/falcon.py +++ b/conversion/falcon.py @@ -11,6 +11,7 @@ @ModelBase.register("FalconForCausalLM", "RWForCausalLM") +@ModelBase.example("tiiuae/falcon-7b") class FalconModel(TextModel): model_arch = gguf.MODEL_ARCH.FALCON diff --git a/conversion/falcon_h1.py b/conversion/falcon_h1.py index a8bc880b2c41..6686f7001c7a 100644 --- a/conversion/falcon_h1.py +++ b/conversion/falcon_h1.py @@ -12,6 +12,7 @@ @ModelBase.register("FalconH1ForCausalLM") +@ModelBase.example("tiiuae/Falcon-H1-0.5B-Base") class FalconH1Model(Mamba2Model): model_arch = gguf.MODEL_ARCH.FALCON_H1 diff --git a/conversion/gemma.py b/conversion/gemma.py index f15a10a38bb6..6b4d7d17154d 100644 --- a/conversion/gemma.py +++ b/conversion/gemma.py @@ -14,6 +14,8 @@ @ModelBase.register("GemmaForCausalLM") +# [TAG_HF_EXAMPLE_GATED] google/gemma-2b is gated +@ModelBase.example("trl-internal-testing/tiny-GemmaForCausalLM") class GemmaModel(TextModel): model_arch = gguf.MODEL_ARCH.GEMMA @@ -68,6 +70,8 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma2ForCausalLM") +# [TAG_HF_EXAMPLE_GATED] google/gemma-2-9b-it is gated +@ModelBase.example("trl-internal-testing/tiny-Gemma2ForCausalLM") class Gemma2Model(TextModel): model_arch = gguf.MODEL_ARCH.GEMMA2 @@ -118,6 +122,8 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma3ForCausalLM", "Gemma3ForConditionalGeneration") +# [TAG_HF_EXAMPLE_GATED] google/gemma-3-4b-it is gated +@ModelBase.example("trl-internal-testing/tiny-Gemma3ForConditionalGeneration", "hf-tiny-v2/tiny-random-Gemma3ForCausalLM") class Gemma3Model(TextModel): model_arch = gguf.MODEL_ARCH.GEMMA3 @@ -174,6 +180,8 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma3TextModel") +# [TAG_HF_EXAMPLE_GATED] google/embeddinggemma-300m is gated +@ModelBase.example("hf-tiny-v2/tiny-random-Gemma3TextModel") class EmbeddingGemma(Gemma3Model): model_arch = gguf.MODEL_ARCH.GEMMA_EMBEDDING module_paths = [] @@ -248,6 +256,8 @@ def set_gguf_parameters(self): @ModelBase.register("Gemma3ForConditionalGeneration") +# [TAG_HF_EXAMPLE_GATED] google/gemma-3-4b-it is gated +@ModelBase.example("trl-internal-testing/tiny-Gemma3ForConditionalGeneration") class Gemma3VisionModel(MmprojModel): def set_gguf_parameters(self): super().set_gguf_parameters() @@ -352,6 +362,8 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma3nForConditionalGeneration") +# [TAG_HF_EXAMPLE_GATED] google/gemma-3n-E2B-it is gated +@ModelBase.example("hf-tiny-v2/tiny-random-Gemma3nForConditionalGeneration") class Gemma3nVisionAudioModel(ConformerAudioModel): has_audio_encoder = True has_vision_encoder = True @@ -471,6 +483,8 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma3nForCausalLM", "Gemma3nForConditionalGeneration") +# [TAG_HF_EXAMPLE_GATED] google/gemma-3n-E2B-it is gated +@ModelBase.example("hf-tiny-v2/tiny-random-Gemma3nForConditionalGeneration") class Gemma3NModel(Gemma3Model): model_arch = gguf.MODEL_ARCH.GEMMA3N @@ -615,6 +629,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma4ForConditionalGeneration", "Gemma4ForCausalLM") +@ModelBase.example("google/gemma-4-31B-it", "google/gemma-4-26B-A4B-it", "google/gemma-4-E2B-it") class Gemma4Model(Gemma3Model): model_arch = gguf.MODEL_ARCH.GEMMA4 @@ -795,6 +810,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma4UnifiedForConditionalGeneration") +@ModelBase.example("hf-tiny-v2/tiny-random-Gemma4UnifiedForConditionalGeneration") class Gemma4UnifiedModel(Gemma4Model): model_arch = gguf.MODEL_ARCH.GEMMA4 @@ -815,6 +831,7 @@ def set_gguf_parameters(self): @ModelBase.register("Gemma4AssistantForCausalLM", "Gemma4UnifiedAssistantForCausalLM") +@ModelBase.example("google/gemma-4-31B-it-assistant", "google/gemma-4-26B-A4B-it-assistant", "google/gemma-4-E2B-it-assistant") class Gemma4AssistantModel(Gemma4Model): model_arch = gguf.MODEL_ARCH.GEMMA4_ASSISTANT @@ -835,6 +852,7 @@ def set_gguf_parameters(self): @ModelBase.register("Gemma4ForConditionalGeneration") +@ModelBase.example("google/gemma-4-31B-it", "google/gemma-4-26B-A4B-it", "google/gemma-4-E2B-it") class Gemma4VisionAudioModel(MmprojModel): has_audio_encoder = True has_vision_encoder = True @@ -913,6 +931,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Gemma4UnifiedForConditionalGeneration") +@ModelBase.example("hf-tiny-v2/tiny-random-Gemma4UnifiedForConditionalGeneration") class Gemma4UnifiedVisionAudioModel(Gemma4VisionAudioModel): has_audio_encoder = True has_vision_encoder = True diff --git a/conversion/glm.py b/conversion/glm.py index e28f54574e07..abd7f279f9b0 100644 --- a/conversion/glm.py +++ b/conversion/glm.py @@ -15,6 +15,7 @@ @ModelBase.register("Glm4ForCausalLM", "Glm4vForConditionalGeneration") +@ModelBase.example("zai-org/GLM-4-9B-0414") class Glm4Model(TextModel): model_arch = gguf.MODEL_ARCH.GLM4 use_mrope = False @@ -86,6 +87,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("GlmOcrForConditionalGeneration") +@ModelBase.example("zai-org/GLM-OCR") class GlmOCRModel(Glm4Model): model_arch = gguf.MODEL_ARCH.GLM4 use_mrope = False @@ -107,6 +109,7 @@ def set_gguf_parameters(self): @ModelBase.register("Glm4MoeForCausalLM", "Glm4vMoeForConditionalGeneration") +@ModelBase.example("zai-org/GLM-4.5-Air") class Glm4MoeModel(TextModel): model_arch = gguf.MODEL_ARCH.GLM4_MOE @@ -204,6 +207,7 @@ def prepare_tensors(self): @ModelBase.register("Glm4MoeLiteForCausalLM") +@ModelBase.example("zai-org/GLM-4.7-Flash") class Glm4MoeLiteModel(DeepseekV2Model): model_arch = gguf.MODEL_ARCH.DEEPSEEK2 skip_mtp = False @@ -272,6 +276,7 @@ def prepare_metadata(self, vocab_only: bool): @ModelBase.register("GlmMoeDsaForCausalLM") +@ModelBase.example("zai-org/GLM-5.2") class GlmMoeDsaModel(DeepseekV2Model): model_arch = gguf.MODEL_ARCH.GLM_DSA skip_mtp = False @@ -340,6 +345,7 @@ def set_gguf_parameters(self): @ModelBase.register("SolarOpenForCausalLM") +@ModelBase.example("upstage/Solar-Open-100B") class SolarOpenModel(Glm4MoeModel): model_arch = gguf.MODEL_ARCH.GLM4_MOE diff --git a/conversion/gpt2.py b/conversion/gpt2.py index 1cf06ae8b50c..06dff9e4c7f6 100644 --- a/conversion/gpt2.py +++ b/conversion/gpt2.py @@ -11,6 +11,7 @@ @ModelBase.register("GPT2LMHeadModel") +@ModelBase.example("openai-community/gpt2") class GPT2Model(TextModel): model_arch = gguf.MODEL_ARCH.GPT2 @@ -38,6 +39,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("RuGPT3XLForCausalLM") +@ModelBase.example("evilfreelancer/ruGPT3XL") class RuGPT3XLModel(TextModel): model_arch = gguf.MODEL_ARCH.GPT2 diff --git a/conversion/gpt_oss.py b/conversion/gpt_oss.py index d2c70c0bba56..7542ec0ea8df 100644 --- a/conversion/gpt_oss.py +++ b/conversion/gpt_oss.py @@ -11,6 +11,7 @@ @ModelBase.register("GptOssForCausalLM") +@ModelBase.example("openai/gpt-oss-20b") class GptOssModel(TextModel): model_arch = gguf.MODEL_ARCH.GPT_OSS diff --git a/conversion/gptneox.py b/conversion/gptneox.py index 6a42b12b15af..0b0e91c4f516 100644 --- a/conversion/gptneox.py +++ b/conversion/gptneox.py @@ -13,6 +13,7 @@ @ModelBase.register("GPTNeoXForCausalLM") +@ModelBase.example("EleutherAI/pythia-70m") class GPTNeoXModel(TextModel): model_arch = gguf.MODEL_ARCH.GPTNEOX diff --git a/conversion/granite.py b/conversion/granite.py index 956342e6d68a..5f1e3e847270 100644 --- a/conversion/granite.py +++ b/conversion/granite.py @@ -15,6 +15,7 @@ @ModelBase.register("GraniteForCausalLM") +@ModelBase.example("ibm-granite/granite-3.3-2b-instruct") class GraniteModel(LlamaModel): """Conversion for IBM's GraniteForCausalLM""" model_arch = gguf.MODEL_ARCH.GRANITE @@ -74,6 +75,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("GraniteMoeForCausalLM", "GraniteMoeSharedForCausalLM") +@ModelBase.example("ibm-granite/granite-3.1-3b-a800m-instruct") class GraniteMoeModel(GraniteModel): """Conversion for IBM's GraniteMoeForCausalLM""" model_arch = gguf.MODEL_ARCH.GRANITE_MOE @@ -124,6 +126,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("GraniteSwitchForCausalLM") +@ModelBase.example("ibm-granite/granite-switch-4.1-3b-preview") class GraniteSwitchModel(GraniteMoeModel): """Dense, all-attention Granite with N per-token embedded LoRA adapters, stacked over the adapter dim with a zero adapter at slot 0 (N = num_adapters + 1).""" @@ -284,6 +287,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("GraniteMoeHybridForCausalLM", "BambaForCausalLM") +@ModelBase.example("ibm-granite/granite-4.0-h-tiny", "ibm-ai-platform/Bamba-9B-v2") class GraniteHybridModel(Mamba2Model, GraniteMoeModel): """GraniteHybrid is a hybrid SSM + Attention model that uses Mamba2 SSM layers and optionally uses MoE w/ a shared expert""" @@ -426,6 +430,7 @@ def set_vocab(self): @ModelBase.register("GraniteSpeechForConditionalGeneration") +@ModelBase.example("ibm-granite/granite-speech-3.3-2b", "ibm-granite/granite-4.0-1b-speech") class GraniteSpeechMmprojModel(MmprojModel): has_vision_encoder = False has_audio_encoder = True @@ -509,6 +514,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("GraniteSpeechPlusForConditionalGeneration") +@ModelBase.example("ibm-granite/granite-speech-4.1-2b-plus") class GraniteSpeechPlusMmprojModel(GraniteSpeechMmprojModel): """Conversion for GraniteSpeechPlus - extends GraniteSpeech with feature layer concatenation""" has_vision_encoder = False @@ -537,6 +543,7 @@ def set_gguf_parameters(self): @ModelBase.register("Granite4VisionForConditionalGeneration") +@ModelBase.example("ibm-granite/granite-4.0-3b-vision") class Granite4VisionMmprojModel(MmprojModel): has_vision_encoder = True has_audio_encoder = False diff --git a/conversion/grok.py b/conversion/grok.py index 9098e514a3a9..b966361d299d 100644 --- a/conversion/grok.py +++ b/conversion/grok.py @@ -13,6 +13,7 @@ @ModelBase.register("GrokForCausalLM", "Grok1ForCausalLM") +@ModelBase.example("keyfan/grok-1-hf") class GrokModel(TextModel): model_arch = gguf.MODEL_ARCH.GROK diff --git a/conversion/grovemoe.py b/conversion/grovemoe.py index a8be931cb900..f418f18ac407 100644 --- a/conversion/grovemoe.py +++ b/conversion/grovemoe.py @@ -11,6 +11,7 @@ @ModelBase.register("GroveMoeForCausalLM", "modeling_grove_moe.GroveMoeForCausalLM") +@ModelBase.example("inclusionAI/GroveMoE-Inst") class GroveMoeModel(TextModel): model_arch = gguf.MODEL_ARCH.GROVEMOE diff --git a/conversion/hunyuan.py b/conversion/hunyuan.py index f5ac8a4fb7f1..ee1a10654523 100644 --- a/conversion/hunyuan.py +++ b/conversion/hunyuan.py @@ -17,6 +17,7 @@ @ModelBase.register("HunYuanMoEV1ForCausalLM") +@ModelBase.example("tencent/Hunyuan-A13B-Instruct") class HunYuanMoEModel(TextModel): model_arch = gguf.MODEL_ARCH.HUNYUAN_MOE @@ -154,6 +155,7 @@ def prepare_tensors(self): @ModelBase.register("HunYuanDenseV1ForCausalLM") +@ModelBase.example("tencent/Hunyuan-4B-Instruct") class HunYuanModel(TextModel): model_arch = gguf.MODEL_ARCH.HUNYUAN_DENSE @@ -290,6 +292,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("HunYuanVLForConditionalGeneration") +@ModelBase.example("tencent/HunyuanOCR") class HunyuanVLVisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -333,6 +336,7 @@ def tensor_force_quant(self, name, new_name, bid, n_dims): @ModelBase.register("HunYuanVLForConditionalGeneration") +@ModelBase.example("tencent/HunyuanOCR") class HunyuanVLTextModel(HunYuanModel): model_arch = gguf.MODEL_ARCH.HUNYUAN_VL @@ -365,6 +369,7 @@ def set_gguf_parameters(self): @ModelBase.register("HYV3ForCausalLM") +@ModelBase.example("tencent/Hy3") class HYV3Model(TextModel): model_arch = gguf.MODEL_ARCH.HY_V3 supports_mtp_export = True diff --git a/conversion/internlm.py b/conversion/internlm.py index 7e11aca3ce0c..df2668474fe6 100644 --- a/conversion/internlm.py +++ b/conversion/internlm.py @@ -14,6 +14,7 @@ @ModelBase.register("InternLM2ForCausalLM") +@ModelBase.example("internlm/internlm2-chat-7b") class InternLM2Model(TextModel): model_arch = gguf.MODEL_ARCH.INTERNLM2 @@ -170,6 +171,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("InternLM3ForCausalLM") +@ModelBase.example("internlm/internlm3-8b-instruct") class InternLM3Model(TextModel): model_arch = gguf.MODEL_ARCH.LLAMA diff --git a/conversion/internvl.py b/conversion/internvl.py index 9a2a1e43df74..799e23f5f58a 100644 --- a/conversion/internvl.py +++ b/conversion/internvl.py @@ -9,6 +9,7 @@ @ModelBase.register("InternVisionModel") +@ModelBase.example("OpenGVLab/InternVL3-2B", "OpenGVLab/InternVL2_5-1B") class InternVisionModel(MmprojModel): min_dynamic_tiles: int = 0 diff --git a/conversion/jais.py b/conversion/jais.py index 00add4c77fc2..f3f96c3efd65 100644 --- a/conversion/jais.py +++ b/conversion/jais.py @@ -11,6 +11,8 @@ @ModelBase.register("Jais2ForCausalLM") +# [TAG_HF_EXAMPLE_GATED] inceptionai/Jais-2-8B-Chat is gated +# [TAG_HF_EXAMPLE_MISSING] class Jais2Model(TextModel): model_arch = gguf.MODEL_ARCH.JAIS2 @@ -22,6 +24,7 @@ def set_gguf_parameters(self): @ModelBase.register("JAISLMHeadModel") +@ModelBase.example("inceptionai/jais-family-590m") class JaisModel(TextModel): model_arch = gguf.MODEL_ARCH.JAIS diff --git a/conversion/jamba.py b/conversion/jamba.py index da712ba50143..a2e642cb0168 100644 --- a/conversion/jamba.py +++ b/conversion/jamba.py @@ -11,6 +11,7 @@ @ModelBase.register("JambaForCausalLM") +@ModelBase.example("ai21labs/Jamba-v0.1") class JambaModel(TextModel): model_arch = gguf.MODEL_ARCH.JAMBA diff --git a/conversion/januspro.py b/conversion/januspro.py index b49691205cc7..0f71ab3cd66b 100644 --- a/conversion/januspro.py +++ b/conversion/januspro.py @@ -11,6 +11,7 @@ @ModelBase.register("JanusForConditionalGeneration") +@ModelBase.example("deepseek-community/Janus-Pro-1B") class JanusProModel(LlamaModel): model_arch = gguf.MODEL_ARCH.LLAMA # reuse Llama arch @@ -34,6 +35,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("JanusForConditionalGeneration") +@ModelBase.example("deepseek-community/Janus-Pro-1B") class JanusProVisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/conversion/kimi_k3.py b/conversion/kimi_k3.py index a5005e15bd62..d15d1d64bfb9 100644 --- a/conversion/kimi_k3.py +++ b/conversion/kimi_k3.py @@ -16,6 +16,7 @@ @ModelBase.register("KimiK3ForConditionalGeneration") +@ModelBase.example("moonshotai/Kimi-K3") class KimiK3Model(TextModel): """ Kimi-K3 text model (KimiLinearForCausalLM under a `language_model.` prefix). diff --git a/conversion/kimi_linear.py b/conversion/kimi_linear.py index f2e6cda83c1f..697ab1b4a9ed 100644 --- a/conversion/kimi_linear.py +++ b/conversion/kimi_linear.py @@ -13,6 +13,7 @@ @ModelBase.register("KimiLinearModel", "KimiLinearForCausalLM") +@ModelBase.example("moonshotai/Kimi-Linear-48B-A3B-Instruct") class KimiLinearModel(TextModel): """Kimi-Linear model with hybrid MLA+KDA architecture""" model_arch = gguf.MODEL_ARCH.KIMI_LINEAR diff --git a/conversion/kimivl.py b/conversion/kimivl.py index 5ff3c39ca9c1..ae60abf30983 100644 --- a/conversion/kimivl.py +++ b/conversion/kimivl.py @@ -11,6 +11,7 @@ @ModelBase.register("KimiVLForConditionalGeneration") +@ModelBase.example("moonshotai/Kimi-VL-A3B-Instruct") class KimiVLModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -52,6 +53,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("KimiK25ForConditionalGeneration") +@ModelBase.example("moonshotai/Kimi-K2.5") class KimiK25Model(MmprojModel): """Kimi-K2.5 with MoonViT3d vision encoder""" @@ -155,6 +157,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Glm5vForConditionalGeneration") +# [TAG_HF_EXAMPLE_MISSING] class Glm5vModel(KimiK25Model): """GLM-5.2-Vision MoonViT3d encoder and projector diff --git a/conversion/laguna.py b/conversion/laguna.py index a90f355ca9b1..29e0b3d6b318 100644 --- a/conversion/laguna.py +++ b/conversion/laguna.py @@ -13,6 +13,7 @@ @ModelBase.register("LagunaForCausalLM") +@ModelBase.example("poolside/Laguna-XS.2", "poolside/Laguna-S-2.1") class LagunaModel(TextModel): model_arch = gguf.MODEL_ARCH.LAGUNA _experts: list[dict] | None = None diff --git a/conversion/lfm2.py b/conversion/lfm2.py index 70ce45658be5..984f44480649 100644 --- a/conversion/lfm2.py +++ b/conversion/lfm2.py @@ -13,6 +13,7 @@ @ModelBase.register("Lfm2ForCausalLM", "LFM2ForCausalLM") +@ModelBase.example("LiquidAI/LFM2-1.2B", "LiquidAI/LFM2.5-350M") class LFM2Model(TextModel): model_arch = gguf.MODEL_ARCH.LFM2 @@ -65,6 +66,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Lfm2Model", "Lfm2BidirectionalModel") +@ModelBase.example("LiquidAI/LFM2.5-ColBERT-350M", "LiquidAI/LFM2.5-Embedding-350M") class LFM2ColBertModel(LFM2Model): model_arch = gguf.MODEL_ARCH.LFM2 dense_tensor_name = "dense_2" @@ -93,6 +95,7 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: @ModelBase.register("Lfm2MoeForCausalLM") +@ModelBase.example("LiquidAI/LFM2-8B-A1B") class LFM2MoeModel(TextModel): model_arch = gguf.MODEL_ARCH.LFM2MOE @@ -166,6 +169,7 @@ def prepare_tensors(self): @ModelBase.register("Lfm2VlForConditionalGeneration") +@ModelBase.example("LiquidAI/LFM2-VL-450M") class LFM2VLModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -200,6 +204,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Lfm2AudioForConditionalGeneration") +@ModelBase.example("LiquidAI/LFM2.5-Audio-1.5B", "LiquidAI/LFM2-Audio-1.5B") class LFM2AudioModel(ConformerAudioModel): has_vision_encoder = False has_audio_encoder = True @@ -238,6 +243,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("Lfm25AudioTokenizer") +@ModelBase.example("LiquidAI/LFM2.5-Audio-1.5B") class LFM25AudioTokenizer(LFM2Model): model_arch = gguf.MODEL_ARCH.LFM2 diff --git a/conversion/lighton_ocr.py b/conversion/lighton_ocr.py index ead3200ac189..8686fe5c9186 100644 --- a/conversion/lighton_ocr.py +++ b/conversion/lighton_ocr.py @@ -11,6 +11,7 @@ @ModelBase.register("LightOnOCRForConditionalGeneration") +@ModelBase.example("lightonai/LightOnOCR-1B-1025") class LightOnOCRVisionModel(LlavaVisionModel): is_mistral_format = False use_break_tok = False diff --git a/conversion/llada.py b/conversion/llada.py index 98dc9de95b37..c03607191a76 100644 --- a/conversion/llada.py +++ b/conversion/llada.py @@ -11,6 +11,7 @@ @ModelBase.register("LLaDAModelLM") +@ModelBase.example("GSAI-ML/LLaDA-8B-Instruct") class LLaDAModel(TextModel): model_arch = gguf.MODEL_ARCH.LLADA undo_permute = True @@ -114,6 +115,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("LLaDAMoEModel", "LLaDAMoEModelLM") +@ModelBase.example("inclusionAI/LLaDA-MoE-7B-A1B-Instruct") class LLaDAMoEModel(TextModel): model_arch = gguf.MODEL_ARCH.LLADA_MOE diff --git a/conversion/llama.py b/conversion/llama.py index 1aced49c54d2..41d8c2309281 100644 --- a/conversion/llama.py +++ b/conversion/llama.py @@ -28,6 +28,8 @@ "Eagle3DraftModel", "IQuestCoderForCausalLM", "LlamaModel") +# [TAG_HF_EXAMPLE_GATED] meta-llama/Llama-3.2-1B-Instruct is gated +@ModelBase.example("unsloth/Llama-3.2-1B-Instruct", "mistralai/Mistral-7B-Instruct-v0.3", "mistralai/Mixtral-8x7B-Instruct-v0.1") class LlamaModel(TextModel): model_arch = gguf.MODEL_ARCH.LLAMA undo_permute = True @@ -359,6 +361,7 @@ def prepare_tensors(self): @ModelBase.register("ArceeForCausalLM") +@ModelBase.example("arcee-ai/AFM-4.5B") class ArceeModel(LlamaModel): model_arch = gguf.MODEL_ARCH.ARCEE @@ -371,6 +374,8 @@ def set_gguf_parameters(self): "Llama4ForConditionalGeneration", "Llama4ForCausalLM", ) +# [TAG_HF_EXAMPLE_GATED] meta-llama/Llama-4-Scout-17B-16E-Instruct is gated +@ModelBase.example("unsloth/Llama-4-Scout-17B-16E-Instruct") class Llama4Model(LlamaModel): model_arch = gguf.MODEL_ARCH.LLAMA4 undo_permute = False @@ -412,16 +417,19 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None): @ModelBase.register("LlamaBidirectionalModel") +@ModelBase.example("nvidia/llama-embed-nemotron-8b") class LlamaEmbedNemotronModel(LlamaModel): model_arch = gguf.MODEL_ARCH.LLAMA_EMBED @ModelBase.register("SmolLM3ForCausalLM") +@ModelBase.example("HuggingFaceTB/SmolLM3-3B") class SmolLM3Model(LlamaModel): model_arch = gguf.MODEL_ARCH.SMOLLM3 @ModelBase.register("ApertusForCausalLM") +@ModelBase.example("swiss-ai/Apertus-8B-Instruct-2509") class ApertusModel(LlamaModel): model_arch = gguf.MODEL_ARCH.APERTUS undo_permute = False diff --git a/conversion/llama4.py b/conversion/llama4.py index f84c76296193..280e309dd5a1 100644 --- a/conversion/llama4.py +++ b/conversion/llama4.py @@ -9,6 +9,8 @@ @ModelBase.register("Llama4ForConditionalGeneration") +# [TAG_HF_EXAMPLE_GATED] meta-llama/Llama-4-Scout-17B-16E-Instruct is gated +@ModelBase.example("unsloth/Llama-4-Scout-17B-16E-Instruct") class Llama4VisionModel(MmprojModel): def set_gguf_parameters(self): super().set_gguf_parameters() diff --git a/conversion/llava.py b/conversion/llava.py index 31d6e2ad80e1..98a004f98693 100644 --- a/conversion/llava.py +++ b/conversion/llava.py @@ -16,6 +16,7 @@ "LlavaForConditionalGeneration", # pixtral "Mistral3ForConditionalGeneration", # mistral small 3.1 ) +@ModelBase.example("mistral-community/pixtral-12b", "mistralai/Mistral-Small-3.1-24B-Instruct-2503") class LlavaVisionModel(MmprojModel): img_break_tok_id = -1 use_break_tok = True diff --git a/conversion/maincoder.py b/conversion/maincoder.py index 18b625b08fb8..2e291b8a9618 100644 --- a/conversion/maincoder.py +++ b/conversion/maincoder.py @@ -4,6 +4,7 @@ @ModelBase.register("MaincoderForCausalLM") +@ModelBase.example("Maincode/Maincoder-1B") class MaincoderModel(TextModel): model_arch = gguf.MODEL_ARCH.MAINCODER diff --git a/conversion/mamba.py b/conversion/mamba.py index 43d559ffb0ae..8a2a4637529a 100644 --- a/conversion/mamba.py +++ b/conversion/mamba.py @@ -14,6 +14,7 @@ @ModelBase.register("MambaForCausalLM", "MambaLMHeadModel", "FalconMambaForCausalLM") +@ModelBase.example("state-spaces/mamba-130m-hf", "tiiuae/falcon-mamba-7b") class MambaModel(TextModel): model_arch = gguf.MODEL_ARCH.MAMBA @@ -100,6 +101,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Mamba2ForCausalLM") +@ModelBase.example("mistralai/Mamba-Codestral-7B-v0.1") class Mamba2Model(TextModel): model_arch = gguf.MODEL_ARCH.MAMBA2 diff --git a/conversion/mellum.py b/conversion/mellum.py index 79bc6755ccca..1e50f92aeafd 100644 --- a/conversion/mellum.py +++ b/conversion/mellum.py @@ -11,6 +11,7 @@ @ModelBase.register("MellumForCausalLM") +@ModelBase.example("JetBrains/Mellum2-12B-A2.5B-Base") class MellumModel(TextModel): model_arch = gguf.MODEL_ARCH.MELLUM diff --git a/conversion/mimo.py b/conversion/mimo.py index ca2ed28ad391..15dbeb7e754f 100644 --- a/conversion/mimo.py +++ b/conversion/mimo.py @@ -14,6 +14,7 @@ @ModelBase.register("MiMoV2FlashForCausalLM", "MiMoV2ForCausalLM") +@ModelBase.example("XiaomiMiMo/MiMo-V2.5") class MimoV2Model(TextModel): model_arch = gguf.MODEL_ARCH.MIMO2 @@ -230,6 +231,7 @@ def prepare_tensors(self): @ModelBase.register("MiMoV2ForCausalLM") +@ModelBase.example("XiaomiMiMo/MiMo-V2.5") class MiMoV2VisionAudioModel(MmprojModel): has_audio_encoder = True diff --git a/conversion/minicpm.py b/conversion/minicpm.py index bf3fa81421bd..678d7bec187a 100644 --- a/conversion/minicpm.py +++ b/conversion/minicpm.py @@ -14,6 +14,7 @@ @ModelBase.register("MiniCPMForCausalLM") +@ModelBase.example("openbmb/MiniCPM-2B-sft-bf16") class MiniCPMModel(TextModel): model_arch = gguf.MODEL_ARCH.MINICPM @@ -61,6 +62,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("MiniCPM3ForCausalLM") +@ModelBase.example("openbmb/MiniCPM3-4B") class MiniCPM3Model(TextModel): model_arch = gguf.MODEL_ARCH.MINICPM3 @@ -117,6 +119,7 @@ def _reverse_hf_permute(self, weights: Tensor, n_head: int, n_kv_head: int | Non # the LM (text mode) and once as the mmproj (vision mode), mirroring the Qwen3-VL setup. @ModelBase.register("MiniCPMV4_6ForConditionalGeneration") +@ModelBase.example("openbmb/MiniCPM-V-4_6") class MiniCPMV4_6TextModel(Qwen3_5TextModel): model_arch = gguf.MODEL_ARCH.QWEN35 @@ -134,6 +137,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("MiniCPMV4_6ForConditionalGeneration") +@ModelBase.example("openbmb/MiniCPM-V-4_6") class MiniCPMV4_6VisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/conversion/minimax.py b/conversion/minimax.py index d7a00bac9500..53a9ff60f836 100644 --- a/conversion/minimax.py +++ b/conversion/minimax.py @@ -12,6 +12,7 @@ @ModelBase.register("MiniMaxText01ForCausalLM") @ModelBase.register("MiniMaxM1ForCausalLM") +@ModelBase.example("MiniMaxAI/MiniMax-Text-01", "MiniMaxAI/MiniMax-M1-40k") class MiniMaxText01Model(TextModel): model_arch = gguf.MODEL_ARCH.MINIMAX01 @@ -119,6 +120,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("MiniMaxM2ForCausalLM") +@ModelBase.example("MiniMaxAI/MiniMax-M2") class MiniMaxM2Model(TextModel): model_arch = gguf.MODEL_ARCH.MINIMAXM2 _experts_cache: dict[int, dict[str, Tensor]] = {} @@ -163,6 +165,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None): @ModelBase.register("MiniMaxM3SparseForCausalLM", "MiniMaxM3SparseForConditionalGeneration") +@ModelBase.example("MiniMaxAI/MiniMax-M3") class MiniMaxM3Model(MiniMaxM2Model): model_arch = gguf.MODEL_ARCH.MINIMAXM3 @@ -203,6 +206,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None): @ModelBase.register("MiniMaxM3SparseForConditionalGeneration", "MiniMaxM3VLForConditionalGeneration") +@ModelBase.example("MiniMaxAI/MiniMax-M3") class MiniMaxM3VisionModel(MmprojModel): @classmethod def filter_tensors(cls, item): diff --git a/conversion/mistral3.py b/conversion/mistral3.py index af9438ae7058..fee039b353c4 100644 --- a/conversion/mistral3.py +++ b/conversion/mistral3.py @@ -15,6 +15,7 @@ "Mistral3ForConditionalGeneration", "Ministral3ForCausalLM", ) +@ModelBase.example("mistralai/Mistral-Small-3.1-24B-Instruct-2503", "hf-tiny-v2/tiny-random-Ministral3ForCausalLM") class Mistral3Model(TextModel): class Ministral3Model(LlamaModel): model_arch = gguf.MODEL_ARCH.MISTRAL3 diff --git a/conversion/mpt.py b/conversion/mpt.py index 9557ab7fa642..d5d849ff35a6 100644 --- a/conversion/mpt.py +++ b/conversion/mpt.py @@ -9,6 +9,7 @@ @ModelBase.register("MPTForCausalLM") +@ModelBase.example("anas-awadalla/mpt-7b") class MPTModel(TextModel): model_arch = gguf.MODEL_ARCH.MPT diff --git a/conversion/muse_glimmer.py b/conversion/muse_glimmer.py index cc588e8321bd..b205f70a0ebe 100644 --- a/conversion/muse_glimmer.py +++ b/conversion/muse_glimmer.py @@ -24,6 +24,7 @@ def _unpermute_for_rope(tensor: "Tensor", n_heads: int) -> "Tensor": @ModelBase.register("MuseGlimmerForConditionalGeneration") +@ModelBase.example("meta-models/Muse-Glimmer-30B") class MuseGlimmerModel(TextModel): model_arch = gguf.MODEL_ARCH.MUSE_GLIMMER @@ -78,6 +79,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("MuseGlimmerForConditionalGeneration") +@ModelBase.example("meta-models/Muse-Glimmer-30B") class MuseGlimmerVisionModel(MmprojModel): def get_vision_config(self) -> dict[str, Any] | None: c = self.global_config.get("vision_config") @@ -131,6 +133,7 @@ def modify_tensors(self, data_torch, name, bid): @ModelBase.register("MuseGlimmerAssistantModel") +@ModelBase.example("meta-models/Muse-Glimmer-30B-assistant") class MuseGlimmerAssistantModel(TextModel): model_arch = gguf.MODEL_ARCH.DFLASH diff --git a/conversion/nanbeige.py b/conversion/nanbeige.py index f1fc425b3a09..a5b269a7a2a7 100644 --- a/conversion/nanbeige.py +++ b/conversion/nanbeige.py @@ -5,6 +5,7 @@ @ModelBase.register("NanbeigeForCausalLM") +@ModelBase.example("Nanbeige/Nanbeige4.2-3B") class NanbeigeModel(LlamaModel): model_arch = gguf.MODEL_ARCH.NANBEIGE undo_permute = True diff --git a/conversion/nemotron.py b/conversion/nemotron.py index c46cec143866..3e37c7b469f5 100644 --- a/conversion/nemotron.py +++ b/conversion/nemotron.py @@ -16,6 +16,7 @@ "NemotronH_Nano_VL_V2", "RADIOModel", ) +@ModelBase.example("nvidia/NVIDIA-Nemotron-Nano-12B-v2-VL-BF16") class NemotronNanoV2VLModel(MmprojModel): # ViT-Huge architecture parameters for RADIO v2.5-h _vit_hidden_size = 1280 @@ -151,6 +152,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("NemotronForCausalLM") +@ModelBase.example("nvidia/Minitron-4B-Base") class NemotronModel(TextModel): model_arch = gguf.MODEL_ARCH.NEMOTRON @@ -193,6 +195,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("NemotronHForCausalLM") +@ModelBase.example("nvidia/Nemotron-H-8B-Base-8K") class NemotronHModel(GraniteHybridModel): """Hybrid mamba2/attention model from NVIDIA""" model_arch = gguf.MODEL_ARCH.NEMOTRON_H diff --git a/conversion/olmo.py b/conversion/olmo.py index 1664c30e402e..e6faa1975864 100644 --- a/conversion/olmo.py +++ b/conversion/olmo.py @@ -14,6 +14,7 @@ @ModelBase.register("OlmoForCausalLM") @ModelBase.register("OLMoForCausalLM") +@ModelBase.example("allenai/OLMo-1.7-7B-hf") class OlmoModel(TextModel): model_arch = gguf.MODEL_ARCH.OLMO @@ -39,12 +40,14 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("SeedOssForCausalLM") +@ModelBase.example("ByteDance-Seed/Seed-OSS-36B-Instruct") class SeedOssModel(TextModel): model_arch = gguf.MODEL_ARCH.SEED_OSS @ModelBase.register("Olmo2ForCausalLM") @ModelBase.register("Olmo3ForCausalLM") +@ModelBase.example("allenai/OLMo-2-1124-7B-Instruct", "allenai/Olmo-3-7B-Instruct") class Olmo2Model(TextModel): model_arch = gguf.MODEL_ARCH.OLMO2 @@ -67,6 +70,7 @@ def set_gguf_parameters(self): @ModelBase.register("OlmoeForCausalLM") +@ModelBase.example("allenai/OLMoE-1B-7B-0924") class OlmoeModel(TextModel): model_arch = gguf.MODEL_ARCH.OLMOE diff --git a/conversion/openelm.py b/conversion/openelm.py index ecc746dc348a..8863378bbfaa 100644 --- a/conversion/openelm.py +++ b/conversion/openelm.py @@ -9,6 +9,7 @@ @ModelBase.register("OpenELMForCausalLM") +@ModelBase.example("apple/OpenELM-270M") class OpenELMModel(TextModel): model_arch = gguf.MODEL_ARCH.OPENELM diff --git a/conversion/orion.py b/conversion/orion.py index 8dfceeed1f7d..3e4c633c1869 100644 --- a/conversion/orion.py +++ b/conversion/orion.py @@ -4,6 +4,7 @@ @ModelBase.register("OrionForCausalLM") +@ModelBase.example("OrionStarAI/Orion-14B-Base") class OrionModel(TextModel): model_arch = gguf.MODEL_ARCH.ORION diff --git a/conversion/pangu.py b/conversion/pangu.py index 42016ba0286f..74c76532b5a6 100644 --- a/conversion/pangu.py +++ b/conversion/pangu.py @@ -11,6 +11,7 @@ @ModelBase.register("PanguEmbeddedForCausalLM") +@ModelBase.example("FreedomIntelligence/openPangu-Embedded-7B-V1.1") class PanguEmbeddedModel(TextModel): model_arch = gguf.MODEL_ARCH.PANGU_EMBED diff --git a/conversion/phi.py b/conversion/phi.py index df4bfe809af7..7d2532067bb0 100644 --- a/conversion/phi.py +++ b/conversion/phi.py @@ -14,6 +14,7 @@ @ModelBase.register("PhiForCausalLM") +@ModelBase.example("microsoft/phi-2") class Phi2Model(TextModel): model_arch = gguf.MODEL_ARCH.PHI2 @@ -36,6 +37,7 @@ def set_gguf_parameters(self): @ModelBase.register("Phi3ForCausalLM", "Phi4ForCausalLMV") +@ModelBase.example("microsoft/Phi-3-mini-4k-instruct") class Phi3MiniModel(TextModel): model_arch = gguf.MODEL_ARCH.PHI3 @@ -210,6 +212,7 @@ def generate_extra_tensors(self) -> Iterable[tuple[str, Tensor]]: @ModelBase.register("Phi4ForCausalLMV") +# [TAG_HF_EXAMPLE_MISSING] class Phi4VisionMmprojModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -336,6 +339,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("PhiMoEForCausalLM") +@ModelBase.example("microsoft/Phi-3.5-MoE-instruct") class PhiMoeModel(Phi3MiniModel): model_arch = gguf.MODEL_ARCH.PHIMOE diff --git a/conversion/plamo.py b/conversion/plamo.py index c4bcbdf06bcb..31c6455aaff6 100644 --- a/conversion/plamo.py +++ b/conversion/plamo.py @@ -13,6 +13,7 @@ @ModelBase.register("PlamoForCausalLM") +@ModelBase.example("pfnet/plamo-13b") class PlamoModel(TextModel): model_arch = gguf.MODEL_ARCH.PLAMO @@ -58,6 +59,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Plamo2ForCausalLM", "PLaMo2ForCausalLM") +@ModelBase.example("pfnet/plamo-2-1b") class Plamo2Model(TextModel): model_arch = gguf.MODEL_ARCH.PLAMO2 @@ -147,6 +149,8 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Plamo3ForCausalLM", "PLaMo3ForCausalLM") +# [TAG_HF_EXAMPLE_GATED] pfnet/plamo-3-nict-2b-base is gated +@ModelBase.example("midorin-Linux/plamo-3-12b-self-merged-base") class Plamo3Model(TextModel): model_arch = gguf.MODEL_ARCH.PLAMO3 diff --git a/conversion/plm.py b/conversion/plm.py index 3fde487085bb..bca0147e6300 100644 --- a/conversion/plm.py +++ b/conversion/plm.py @@ -4,6 +4,7 @@ @ModelBase.register("PLMForCausalLM") +@ModelBase.example("PLM-Team/PLM-1.8B-Instruct") class PLMModel(TextModel): model_arch = gguf.MODEL_ARCH.PLM diff --git a/conversion/pockettts.py b/conversion/pockettts.py index 62ecb5acde74..1c99e58cfc77 100644 --- a/conversion/pockettts.py +++ b/conversion/pockettts.py @@ -77,6 +77,7 @@ def _load_hparams(dir_model: Path) -> dict[str, Any]: @ModelBase.register("PocketTTSModel") +# [TAG_HF_EXAMPLE_MISSING] model is gated, and the checkpoint requires cd to subdir, not supported here class PocketTTSModel(TextModel): model_arch = gguf.MODEL_ARCH.POCKETTTS @@ -174,6 +175,7 @@ def _embd_table(self, embed: Tensor) -> Tensor: @ModelBase.register("PocketTTSModel") +# [TAG_HF_EXAMPLE_MISSING] model is gated, and the checkpoint requires cd to subdir, not supported here class PocketTTSMmprojModel(MmprojModel): has_audio_encoder = True has_vision_encoder = False diff --git a/conversion/qwen.py b/conversion/qwen.py index ead435455dd6..7a1c11317b35 100644 --- a/conversion/qwen.py +++ b/conversion/qwen.py @@ -13,6 +13,7 @@ @ModelBase.register("QWenLMHeadModel") +@ModelBase.example("Qwen/Qwen-7B") class QwenModel(TextModel): model_arch = gguf.MODEL_ARCH.QWEN @@ -51,6 +52,7 @@ def set_vocab(self): "AudioFlamingo3ForConditionalGeneration", "DotsOCRForCausalLM", ) +@ModelBase.example("Qwen/Qwen2.5-7B-Instruct") class Qwen2Model(TextModel): model_arch = gguf.MODEL_ARCH.QWEN2 @@ -71,6 +73,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen2MoeForCausalLM") +@ModelBase.example("Qwen/Qwen1.5-MoE-A2.7B") class Qwen2MoeModel(TextModel): model_arch = gguf.MODEL_ARCH.QWEN2MOE @@ -153,6 +156,7 @@ def prepare_tensors(self): @ModelBase.register("Qwen3ForCausalLM", "Qwen3Model") +@ModelBase.example("Qwen/Qwen3-8B") class Qwen3Model(Qwen2Model): model_arch = gguf.MODEL_ARCH.QWEN3 @@ -251,6 +255,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen3MoeForCausalLM") +@ModelBase.example("Qwen/Qwen3-30B-A3B") class Qwen3MoeModel(Qwen2MoeModel): model_arch = gguf.MODEL_ARCH.QWEN3MOE @@ -362,6 +367,7 @@ def prepare_metadata(self, vocab_only: bool): @ModelBase.register("Qwen3NextForCausalLM") +@ModelBase.example("Qwen/Qwen3-Next-80B-A3B-Instruct") class Qwen3NextModel(_QwenMtpMixin, Qwen2MoeModel): model_arch = gguf.MODEL_ARCH.QWEN3NEXT @@ -421,6 +427,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("RND1") +@ModelBase.example("radicalnumerics/RND1-Base-0910") class RND1Model(Qwen2MoeModel): model_arch = gguf.MODEL_ARCH.RND1 @@ -620,16 +627,19 @@ def set_gguf_parameters(self): @ModelBase.register("Qwen3_5ForConditionalGeneration", "Qwen3_5ForCausalLM") +@ModelBase.example("Qwen/Qwen3.5-9B") class Qwen3_5TextModel(_Qwen35MRopeMixin, _LinearAttentionVReorderBase): model_arch = gguf.MODEL_ARCH.QWEN35 @ModelBase.register("Qwen3_5MoeForConditionalGeneration", "Qwen3_5MoeForCausalLM") +@ModelBase.example("Qwen/Qwen3.5-35B-A3B") class Qwen3_5MoeTextModel(_Qwen35MRopeMixin, _LinearAttentionVReorderBase): model_arch = gguf.MODEL_ARCH.QWEN35MOE @ModelBase.register("DFlashDraftModel") +@ModelBase.example("z-lab/Qwen3.5-9B-DFlash") class DFlashModel(Qwen3Model): model_arch = gguf.MODEL_ARCH.DFLASH @@ -699,6 +709,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen3DSparkModel") +@ModelBase.example("satgeze/Qwen3.6-27B-DSpark") class DSparkModel(DFlashModel): # DSpark = DFlash + a semi-autoregressive Markov head model_arch = gguf.MODEL_ARCH.DFLASH diff --git a/conversion/qwen3tts.py b/conversion/qwen3tts.py index d21a5059517a..1f6b9a1b0efb 100644 --- a/conversion/qwen3tts.py +++ b/conversion/qwen3tts.py @@ -37,6 +37,7 @@ @ModelBase.register("Qwen3TTSForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-TTS-12Hz-1.7B-Base") class Qwen3TTSTalkerModel(TextModel): model_arch = gguf.MODEL_ARCH.QWEN3TTS @@ -185,6 +186,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen3TTSForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-TTS-12Hz-1.7B-Base") class Qwen3TTSSpeakerEncoderModel(MmprojModel): has_vision_encoder = False has_audio_encoder = True diff --git a/conversion/qwen3vl.py b/conversion/qwen3vl.py index 9f11757697f5..4fec708c9ff3 100644 --- a/conversion/qwen3vl.py +++ b/conversion/qwen3vl.py @@ -14,6 +14,7 @@ @ModelBase.register("Qwen3VLForConditionalGeneration", "Qwen3VLMoeForConditionalGeneration", "Qwen3_5ForConditionalGeneration", "Qwen3_5MoeForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-VL-4B-Instruct", "Qwen/Qwen3-VL-30B-A3B-Instruct", "Qwen/Qwen3.5-9B", "Qwen/Qwen3.5-35B-A3B") class Qwen3VLVisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -144,6 +145,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen3OmniMoeForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-Omni-30B-A3B-Instruct") class Qwen3OmniMmprojModel(Qwen3VLVisionModel, Qwen25AudioModel): has_audio_encoder = True has_vision_encoder = True @@ -217,12 +219,14 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen3ASRForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-ASR-0.6B-hf") class Qwen3ASRMmprojModel(Qwen3OmniMmprojModel): has_audio_encoder = True has_vision_encoder = False @ModelBase.register("Glm4vForConditionalGeneration", "Glm4vMoeForConditionalGeneration", "GlmOcrForConditionalGeneration") +@ModelBase.example("zai-org/GLM-4.1V-9B-Thinking", "zai-org/GLM-4.5V") class Glm4VVisionModel(Qwen3VLVisionModel): def set_gguf_parameters(self): MmprojModel.set_gguf_parameters(self) # skip Qwen3VLVisionModel parameters @@ -246,6 +250,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen3VLForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-VL-4B-Instruct") class Qwen3VLTextModel(Qwen3Model): model_arch = gguf.MODEL_ARCH.QWEN3VL @@ -268,6 +273,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("Qwen3VLMoeForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-VL-30B-A3B-Instruct") class Qwen3VLMoeTextModel(Qwen3MoeModel): model_arch = gguf.MODEL_ARCH.QWEN3VLMOE @@ -317,6 +323,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen3OmniMoeForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-Omni-30B-A3B-Instruct") class Qwen3OmniMoeTextModel(Qwen3VLMoeTextModel): model_arch = gguf.MODEL_ARCH.QWEN3VLMOE @@ -338,6 +345,7 @@ def set_gguf_parameters(self): @ModelBase.register("Qwen3ASRForConditionalGeneration") +@ModelBase.example("Qwen/Qwen3-ASR-0.6B-hf") class Qwen3ASRTextModel(Qwen3VLTextModel): model_arch = gguf.MODEL_ARCH.QWEN3VL diff --git a/conversion/qwenvl.py b/conversion/qwenvl.py index 202a47961b3c..579a86a99f57 100644 --- a/conversion/qwenvl.py +++ b/conversion/qwenvl.py @@ -17,6 +17,7 @@ "Qwen2_5_VLForConditionalGeneration", "Qwen2_5OmniModel", ) +@ModelBase.example("Qwen/Qwen2-VL-2B-Instruct", "Qwen/Qwen2.5-VL-3B-Instruct") class Qwen2VLModel(TextModel): model_arch = gguf.MODEL_ARCH.QWEN2VL @@ -40,6 +41,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("Qwen2VLModel", "Qwen2VLForConditionalGeneration", "Qwen2_5_VLForConditionalGeneration") +@ModelBase.example("Qwen/Qwen2-VL-2B-Instruct", "Qwen/Qwen2.5-VL-3B-Instruct") class Qwen2VLVisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -161,6 +163,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen2_5OmniModel") +@ModelBase.example("Qwen/Qwen2.5-Omni-3B") class Qwen25OmniModel(Qwen2VLVisionModel, Qwen25AudioModel): has_audio_encoder = True has_vision_encoder = True diff --git a/conversion/refact.py b/conversion/refact.py index 1170cddeb2cc..d6361512f716 100644 --- a/conversion/refact.py +++ b/conversion/refact.py @@ -9,6 +9,7 @@ @ModelBase.register("GPTRefactForCausalLM") +@ModelBase.example("smallcloudai/Refact-1_6-base") class RefactModel(TextModel): model_arch = gguf.MODEL_ARCH.REFACT diff --git a/conversion/rwkv.py b/conversion/rwkv.py index 2de0aa5346e9..e6fa84264efd 100644 --- a/conversion/rwkv.py +++ b/conversion/rwkv.py @@ -11,6 +11,7 @@ @ModelBase.register("Rwkv6ForCausalLM") +@ModelBase.example("RWKV/v6-Finch-1B6-HF") class Rwkv6Model(TextModel): model_arch = gguf.MODEL_ARCH.RWKV6 @@ -83,6 +84,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("RWKV6Qwen2ForCausalLM") +@ModelBase.example("recursal/QRWKV6-32B-Instruct-Preview-v0.1") class RWKV6Qwen2Model(Rwkv6Model): model_arch = gguf.MODEL_ARCH.RWKV6QWEN2 @@ -136,6 +138,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Rwkv7ForCausalLM", "RWKV7ForCausalLM") +@ModelBase.example("fla-hub/rwkv7-1.5B-world") class Rwkv7Model(TextModel): model_arch = gguf.MODEL_ARCH.RWKV7 @@ -261,6 +264,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("RwkvHybridForCausalLM") +@ModelBase.example("RWKV-Red-Team/ARWKV-7B-Preview-0.1") class ARwkv7Model(Rwkv7Model): model_arch = gguf.MODEL_ARCH.ARWKV7 diff --git a/conversion/sarashina2.py b/conversion/sarashina2.py index 05448db812e4..fdb3e78da66a 100644 --- a/conversion/sarashina2.py +++ b/conversion/sarashina2.py @@ -12,6 +12,7 @@ @ModelBase.register("Sarashina2VisionForCausalLM") +@ModelBase.example("sbintuitions/sarashina2.2-vision-3b") class Sarashina2VLTextModel(LlamaModel): model_arch = gguf.MODEL_ARCH.LLAMA @@ -26,6 +27,7 @@ def filter_tensors(cls, item: tuple[str, Callable[[], Tensor]]) -> tuple[str, Ca @ModelBase.register("Sarashina2VisionForCausalLM") +@ModelBase.example("sbintuitions/sarashina2.2-vision-3b") class Sarashina2VLVisionModel(Qwen2VLVisionModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/conversion/smallthinker.py b/conversion/smallthinker.py index 1b0f79aa3ea7..73d07b51a341 100644 --- a/conversion/smallthinker.py +++ b/conversion/smallthinker.py @@ -11,6 +11,7 @@ @ModelBase.register("SmallThinkerForCausalLM") +@ModelBase.example("PowerInfer/SmallThinker-4BA0.6B-Instruct") class SmallThinkerModel(TextModel): model_arch = gguf.MODEL_ARCH.SMALLTHINKER diff --git a/conversion/smolvlm.py b/conversion/smolvlm.py index 30e9dca329b5..0cccb8f6f97b 100644 --- a/conversion/smolvlm.py +++ b/conversion/smolvlm.py @@ -9,6 +9,7 @@ @ModelBase.register("Idefics3ForConditionalGeneration", "SmolVLMForConditionalGeneration") +@ModelBase.example("HuggingFaceTB/SmolVLM-Instruct", "HuggingFaceM4/Idefics3-8B-Llama3") class SmolVLMModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/conversion/stablelm.py b/conversion/stablelm.py index 6e16378a031f..ac3a1ca9e1f1 100644 --- a/conversion/stablelm.py +++ b/conversion/stablelm.py @@ -11,6 +11,7 @@ @ModelBase.register("StableLmForCausalLM", "StableLMEpochForCausalLM", "LlavaStableLMEpochForCausalLM") +@ModelBase.example("stabilityai/stablelm-2-1_6b") class StableLMModel(TextModel): model_arch = gguf.MODEL_ARCH.STABLELM diff --git a/conversion/starcoder.py b/conversion/starcoder.py index 0b4ffd84702a..4a726ac36ad9 100644 --- a/conversion/starcoder.py +++ b/conversion/starcoder.py @@ -4,6 +4,7 @@ @ModelBase.register("GPTBigCodeForCausalLM") +@ModelBase.example("bigcode/gpt_bigcode-santacoder") class StarCoderModel(TextModel): model_arch = gguf.MODEL_ARCH.STARCODER @@ -19,5 +20,6 @@ def set_gguf_parameters(self): @ModelBase.register("Starcoder2ForCausalLM") +@ModelBase.example("bigcode/starcoder2-3b") class StarCoder2Model(TextModel): model_arch = gguf.MODEL_ARCH.STARCODER2 diff --git a/conversion/step3.py b/conversion/step3.py index f7cdc997e528..93eb3134e09e 100644 --- a/conversion/step3.py +++ b/conversion/step3.py @@ -16,6 +16,7 @@ @ModelBase.register("StepVLForConditionalGeneration", "Step3p7ForConditionalGeneration") +@ModelBase.example("stepfun-ai/Step3-VL-10B", "stepfun-ai/Step-3.7-Flash") class Step3VLVisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -91,11 +92,13 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("StepVLForConditionalGeneration") +@ModelBase.example("stepfun-ai/Step3-VL-10B") class Step3VLTextModel(Qwen3Model): model_arch = gguf.MODEL_ARCH.QWEN3 @ModelBase.register("Step3p5ForCausalLM", "Step3p7ForConditionalGeneration") +@ModelBase.example("stepfun-ai/Step-3.7-Flash") class Step35Model(TextModel): model_arch = gguf.MODEL_ARCH.STEP35 supports_mtp_export = True diff --git a/conversion/t5.py b/conversion/t5.py index 73dcfd1a2ced..3466ce49da63 100644 --- a/conversion/t5.py +++ b/conversion/t5.py @@ -16,6 +16,7 @@ @ModelBase.register("MT5ForConditionalGeneration") @ModelBase.register("UMT5ForConditionalGeneration") @ModelBase.register("UMT5Model") +@ModelBase.example("google-t5/t5-small", "google/flan-t5-small", "google/umt5-small") class T5Model(TextModel): model_arch = gguf.MODEL_ARCH.T5 @@ -153,6 +154,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("T5EncoderModel") +@ModelBase.example("sentence-transformers/sentence-t5-base") class T5EncoderModel(TextModel): model_arch = gguf.MODEL_ARCH.T5ENCODER diff --git a/conversion/talkie.py b/conversion/talkie.py index a970b32d3bf9..31445243de8b 100644 --- a/conversion/talkie.py +++ b/conversion/talkie.py @@ -11,6 +11,7 @@ @ModelBase.register("TalkieForCausalLM") +@ModelBase.example("lewtun/talkie-1930-13b-it-hf") class TalkieModel(TextModel): model_arch = gguf.MODEL_ARCH.TALKIE diff --git a/conversion/ultravox.py b/conversion/ultravox.py index 347188733a51..62819e574d57 100644 --- a/conversion/ultravox.py +++ b/conversion/ultravox.py @@ -9,6 +9,7 @@ @ModelBase.register("UltravoxModel") +@ModelBase.example("fixie-ai/ultravox-v0_5-llama-3_2-1b") class UltravoxModel(TextModel): model_arch = gguf.MODEL_ARCH.LLAMA # dummy @@ -18,6 +19,7 @@ def __init__(self, *args, **kwargs): @ModelBase.register("GlmasrModel") +@ModelBase.example("zai-org/GLM-ASR-Nano-2512") class GlmASRWhisperEncoderModel(MmprojModel): has_vision_encoder = False has_audio_encoder = True @@ -82,6 +84,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("Qwen2AudioForConditionalGeneration") +@ModelBase.example("Qwen/Qwen2-Audio-7B-Instruct") class WhisperEncoderModel(MmprojModel): has_vision_encoder = False # no vision encoder has_audio_encoder = True @@ -123,6 +126,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("UltravoxModel") +@ModelBase.example("fixie-ai/ultravox-v0_5-llama-3_2-1b") class UltravoxWhisperEncoderModel(WhisperEncoderModel): has_vision_encoder = False # no vision encoder has_audio_encoder = True @@ -134,6 +138,7 @@ def set_gguf_parameters(self): @ModelBase.register("MERaLiON2ForConditionalGeneration") +@ModelBase.example("MERaLiON/MERaLiON-2-3B") class MERaLiONWhisperEncoderModel(WhisperEncoderModel): has_vision_encoder = False has_audio_encoder = True @@ -180,6 +185,7 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter @ModelBase.register("VoxtralForConditionalGeneration") +@ModelBase.example("mistralai/Voxtral-Mini-3B-2507") class VoxtralWhisperEncoderModel(WhisperEncoderModel): has_vision_encoder = False # no vision encoder has_audio_encoder = True @@ -191,6 +197,7 @@ def set_gguf_parameters(self): @ModelBase.register("AudioFlamingo3ForConditionalGeneration") +@ModelBase.example("nvidia/audio-flamingo-3-hf") class AudioFlamingo3WhisperEncoderModel(WhisperEncoderModel): def set_gguf_parameters(self): super().set_gguf_parameters() diff --git a/conversion/wavtokenizer.py b/conversion/wavtokenizer.py index 7d25447be88a..c9a4b505da93 100644 --- a/conversion/wavtokenizer.py +++ b/conversion/wavtokenizer.py @@ -9,6 +9,7 @@ @ModelBase.register("WavTokenizerDec") +@ModelBase.example("novateur/WavTokenizer-large-speech-75token") class WavTokenizerDecModel(TextModel): model_arch = gguf.MODEL_ARCH.WAVTOKENIZER_DEC diff --git a/conversion/xverse.py b/conversion/xverse.py index fa8a31a133ff..aa3b338802e4 100644 --- a/conversion/xverse.py +++ b/conversion/xverse.py @@ -11,6 +11,7 @@ @ModelBase.register("XverseForCausalLM") +@ModelBase.example("xverse/XVERSE-7B") class XverseModel(TextModel): model_arch = gguf.MODEL_ARCH.XVERSE diff --git a/conversion/youtuvl.py b/conversion/youtuvl.py index cabc44445f37..e97261077215 100644 --- a/conversion/youtuvl.py +++ b/conversion/youtuvl.py @@ -9,6 +9,7 @@ @ModelBase.register("YoutuVLForConditionalGeneration") +@ModelBase.example("tencent/Youtu-VL-4B-Instruct") class YoutuVLVisionModel(MmprojModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/docs/development/HOWTO-add-model.md b/docs/development/HOWTO-add-model.md index 270e6b735651..fcc87f16515b 100644 --- a/docs/development/HOWTO-add-model.md +++ b/docs/development/HOWTO-add-model.md @@ -29,6 +29,7 @@ The required steps to implement for an HF model are: ```python @ModelBase.register("MyModelForCausalLM") +@ModelBase.example("user/model") class MyModel(TextModel): model_arch = gguf.MODEL_ARCH.MYMODEL ``` @@ -37,10 +38,13 @@ or ```python @ModelBase.register("MyModelForConditionalGeneration") +@ModelBase.example("user/model") class MyModel(MmprojModel): model_arch = gguf.MODEL_ARCH.MYMODEL ``` +The `example` should point to a valid Hugging Face model that will be used for testing. You can add multiple models if necessary. Prefer a non-gated model, or tiny random weights if no such model exists. + 2. Define the layout of the GGUF tensors in [constants.py](/gguf-py/gguf/constants.py) Add an enum entry in `MODEL_ARCH`, the model human friendly name in `MODEL_ARCH_NAMES` and the GGUF tensor names in `MODEL_TENSORS`.