diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 8fcff0de7d6ba..b45f30fd37b22 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -2712,6 +2712,11 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter yield from super().modify_tensors(data_torch, name, bid) +@ModelBase.register("Eagle2DraftForCausalLM") +class Eagle2DraftModel(Qwen2Model): + model_arch = gguf.MODEL_ARCH.EAGLE2_DRAFT + + @ModelBase.register( "Qwen2VLModel", "Qwen2VLForConditionalGeneration", diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 635b61f224b1e..4055ad17f76fe 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -300,6 +300,7 @@ class MODEL_ARCH(IntEnum): QWEN2VL = auto() QWEN3 = auto() QWEN3MOE = auto() + EAGLE2_DRAFT = auto() PHI2 = auto() PHI3 = auto() PHIMOE = auto() @@ -360,6 +361,7 @@ class MODEL_TENSOR(IntEnum): TOKEN_EMBD_NORM = auto() TOKEN_TYPES = auto() POS_EMBD = auto() + FC = auto() OUTPUT = auto() OUTPUT_NORM = auto() ROPE_FREQS = auto() @@ -580,6 +582,7 @@ class MODEL_TENSOR(IntEnum): MODEL_ARCH.QWEN2VL: "qwen2vl", MODEL_ARCH.QWEN3: "qwen3", MODEL_ARCH.QWEN3MOE: "qwen3moe", + MODEL_ARCH.EAGLE2_DRAFT: "eagle2-draft", MODEL_ARCH.PHI2: "phi2", MODEL_ARCH.PHI3: "phi3", MODEL_ARCH.PHIMOE: "phimoe", @@ -640,6 +643,7 @@ class MODEL_TENSOR(IntEnum): MODEL_TENSOR.TOKEN_EMBD_NORM: "token_embd_norm", MODEL_TENSOR.TOKEN_TYPES: "token_types", MODEL_TENSOR.POS_EMBD: "position_embd", + MODEL_TENSOR.FC: "fc", MODEL_TENSOR.OUTPUT_NORM: "output_norm", MODEL_TENSOR.OUTPUT: "output", MODEL_TENSOR.ROPE_FREQS: "rope_freqs", @@ -1207,6 +1211,21 @@ class MODEL_TENSOR(IntEnum): MODEL_TENSOR.FFN_DOWN, MODEL_TENSOR.FFN_UP, ], + MODEL_ARCH.EAGLE2_DRAFT: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.FC, + MODEL_TENSOR.OUTPUT, + MODEL_TENSOR.ATTN_NORM, + MODEL_TENSOR.ATTN_Q, + MODEL_TENSOR.ATTN_K, + MODEL_TENSOR.ATTN_V, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.FFN_NORM, + MODEL_TENSOR.FFN_GATE, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_UP, + + ], MODEL_ARCH.QWEN2MOE: [ MODEL_TENSOR.TOKEN_EMBD, MODEL_TENSOR.OUTPUT_NORM, diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index 48167dd648c0a..455bd685d0999 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -58,6 +58,10 @@ class TensorNameMap: "wpe", # gpt2 ), + # eagle2 draft model + MODEL_TENSOR.FC: ( + "model.fc", + ), # Output MODEL_TENSOR.OUTPUT: ( "embed_out", # gptneox