From b7cebedb03fcd96031497cd2c2e511e6104b493d Mon Sep 17 00:00:00 2001 From: Galunid Date: Fri, 24 Oct 2025 20:45:41 +0200 Subject: [PATCH 1/5] convert: handle mmproj model output filename properly --- convert_hf_to_gguf.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 3e3db999c92ed..dd0836c6839c9 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -1497,6 +1497,20 @@ def get_audio_config(self) -> dict[str, Any] | None: def set_type(self): self.gguf_writer.add_type(gguf.GGUFType.MMPROJ) + def prepare_metadata(self, vocab_only: bool): + super().prepare_metadata(vocab_only) + + output_type: str = self.ftype.name.partition("_")[2] + # Filename Output + if self.fname_out.is_dir(): + fname_default: str = gguf.naming_convention(self.metadata.name, self.metadata.basename, self.metadata.finetune, self.metadata.version, size_label=None, output_type=output_type, model_type="mmproj") + + # Use the default filename + self.fname_out = self.fname_out / f"{fname_default}.gguf" + else: + # Process templated file name with the output ftype, useful with the "auto" ftype + self.fname_out = self.fname_out.parent / gguf.fill_templated_filename(self.fname_out.name, output_type) + def set_gguf_parameters(self): self.gguf_writer.add_file_type(self.ftype) @@ -9722,10 +9736,6 @@ def main() -> None: logger.info(f"Loading model: {dir_model.name}") - if args.mmproj: - if "mmproj" not in fname_out.name: - fname_out = ModelBase.add_prefix_to_filename(fname_out, "mmproj-") - is_mistral_format = args.mistral_format if is_mistral_format and not _mistral_common_installed: raise ImportError(_mistral_import_error_msg) From 425077063835f8b3919255804cd9019f718b1260 Mon Sep 17 00:00:00 2001 From: Galunid Date: Fri, 24 Oct 2025 20:51:10 +0200 Subject: [PATCH 2/5] remove redundant commits --- convert_hf_to_gguf.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index dd0836c6839c9..46ce6a1b1e334 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -1501,14 +1501,11 @@ def prepare_metadata(self, vocab_only: bool): super().prepare_metadata(vocab_only) output_type: str = self.ftype.name.partition("_")[2] - # Filename Output + if self.fname_out.is_dir(): fname_default: str = gguf.naming_convention(self.metadata.name, self.metadata.basename, self.metadata.finetune, self.metadata.version, size_label=None, output_type=output_type, model_type="mmproj") - - # Use the default filename self.fname_out = self.fname_out / f"{fname_default}.gguf" else: - # Process templated file name with the output ftype, useful with the "auto" ftype self.fname_out = self.fname_out.parent / gguf.fill_templated_filename(self.fname_out.name, output_type) def set_gguf_parameters(self): From 454add4146dfe8cbadf2c69bb0715341edd533b8 Mon Sep 17 00:00:00 2001 From: Galunid Date: Fri, 24 Oct 2025 21:02:05 +0200 Subject: [PATCH 3/5] Add model_type to gguf utility --- gguf-py/gguf/utility.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gguf-py/gguf/utility.py b/gguf-py/gguf/utility.py index 769ccb02f0d91..cffea22a2417f 100644 --- a/gguf-py/gguf/utility.py +++ b/gguf-py/gguf/utility.py @@ -50,7 +50,7 @@ def size_label(total_params: int, shared_params: int, expert_params: int, expert return size_class -def naming_convention(model_name: str | None, base_name: str | None, finetune_string: str | None, version_string: str | None, size_label: str | None, output_type: str | None, model_type: Literal['vocab', 'LoRA'] | None = None) -> str: +def naming_convention(model_name: str | None, base_name: str | None, finetune_string: str | None, version_string: str | None, size_label: str | None, output_type: str | None, model_type: Literal['vocab', 'LoRA', 'mmproj'] | None = None) -> str: # Reference: https://github.com/ggml-org/ggml/blob/master/docs/gguf.md#gguf-naming-convention if base_name is not None: From 02fe159e538b2c5bca7d0461b9947cf74ed96bfa Mon Sep 17 00:00:00 2001 From: Galunid Date: Sat, 25 Oct 2025 07:22:32 +0200 Subject: [PATCH 4/5] Use mmproj- prefix instead of suffix --- convert_hf_to_gguf.py | 4 ++-- gguf-py/gguf/utility.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 46ce6a1b1e334..b504e8168e0e3 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -1503,8 +1503,8 @@ def prepare_metadata(self, vocab_only: bool): output_type: str = self.ftype.name.partition("_")[2] if self.fname_out.is_dir(): - fname_default: str = gguf.naming_convention(self.metadata.name, self.metadata.basename, self.metadata.finetune, self.metadata.version, size_label=None, output_type=output_type, model_type="mmproj") - self.fname_out = self.fname_out / f"{fname_default}.gguf" + fname_default: str = gguf.naming_convention(self.metadata.name, self.metadata.basename, self.metadata.finetune, self.metadata.version, size_label=None, output_type=output_type, model_type=None) + self.fname_out = self.fname_out / f"mmproj-{fname_default}.gguf" else: self.fname_out = self.fname_out.parent / gguf.fill_templated_filename(self.fname_out.name, output_type) diff --git a/gguf-py/gguf/utility.py b/gguf-py/gguf/utility.py index cffea22a2417f..769ccb02f0d91 100644 --- a/gguf-py/gguf/utility.py +++ b/gguf-py/gguf/utility.py @@ -50,7 +50,7 @@ def size_label(total_params: int, shared_params: int, expert_params: int, expert return size_class -def naming_convention(model_name: str | None, base_name: str | None, finetune_string: str | None, version_string: str | None, size_label: str | None, output_type: str | None, model_type: Literal['vocab', 'LoRA', 'mmproj'] | None = None) -> str: +def naming_convention(model_name: str | None, base_name: str | None, finetune_string: str | None, version_string: str | None, size_label: str | None, output_type: str | None, model_type: Literal['vocab', 'LoRA'] | None = None) -> str: # Reference: https://github.com/ggml-org/ggml/blob/master/docs/gguf.md#gguf-naming-convention if base_name is not None: From 973fd624ea4d1c0e9b8fecba03a2df5da3b4615f Mon Sep 17 00:00:00 2001 From: Galunid Date: Sat, 25 Oct 2025 17:43:08 +0200 Subject: [PATCH 5/5] Apply CISC suggestion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sigbjørn Skjæret --- convert_hf_to_gguf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index b504e8168e0e3..9ca902d81a013 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -1498,7 +1498,7 @@ def set_type(self): self.gguf_writer.add_type(gguf.GGUFType.MMPROJ) def prepare_metadata(self, vocab_only: bool): - super().prepare_metadata(vocab_only) + super().prepare_metadata(vocab_only=vocab_only) output_type: str = self.ftype.name.partition("_")[2]