Commit d81aef199 for llama.cpp

commit d81aef19941e145d04f88fb180ea89a67d052ab5
Author: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>
Date:   Fri Sep 25 11:55:38 2026 +0200

    gguf-py : TemplateProcessing has final word on add_special_token (#29417)

    * templateprocessing must win over tokenizer config

    * remove obsolete override

diff --git a/conversion/nemotron.py b/conversion/nemotron.py
index 65728d554..c9bb3031f 100644
--- a/conversion/nemotron.py
+++ b/conversion/nemotron.py
@@ -424,12 +424,6 @@ class NemotronHModel(GraniteHybridModel):
         special_vocab = gguf.SpecialVocab(self.dir_model, load_merges=True)
         special_vocab.add_to_gguf(self.gguf_writer)

-        # The tokenizer _does_ add a BOS token (via post_processor type
-        # TemplateProcessing) but does not set add_bos_token to true in the
-        # config, so we need to explicitly override it here.
-        if not self.is_moe:
-            self.gguf_writer.add_add_bos_token(True)
-
     _MTP_SPECIAL_RENAMES = {
         "mtp.layers.0.enorm.weight":           "model.layers.{bid}.enorm.weight",
         "mtp.layers.0.hnorm.weight":           "model.layers.{bid}.hnorm.weight",
diff --git a/gguf-py/gguf/vocab.py b/gguf-py/gguf/vocab.py
index d93b94f2d..b5eaa71dd 100644
--- a/gguf-py/gguf/vocab.py
+++ b/gguf-py/gguf/vocab.py
@@ -336,7 +336,10 @@ class SpecialVocab:
         for typ in self.special_token_types:
             add_entry = tokenizer_config.get(f'add_{typ}_token')
             if isinstance(add_entry, bool):
-                self.add_special_token[typ] = add_entry
+                if typ not in self.add_special_token:
+                    self.add_special_token[typ] = add_entry
+                elif self.add_special_token[typ] != add_entry:
+                    logger.warning(f'Mismatch between tokenizer_config add_{typ}_token({add_entry}) and TemplateProcessing<{typ}>({self.add_special_token[typ]}) - opting for the latter')
             entry = tokenizer_config.get(f'{typ}_token')
             if isinstance(entry, str):
                 tc_content = entry