@@ -1163,6 +1163,9 @@ def get_vocab_base_pre(self, tokenizer) -> str:
11631163 if chkhsh == "b53802fb28e26d645c3a310b34bfe07da813026ec7c7716883404d5e0f8b1901":
11641164 # ref: https://huggingface.co/core42/jais-13b
11651165 res = "jais"
1166+ if chkhsh == "bc5108ee1eb6a3d600cadd065f63190fbd0554dbc9e4bbd6a0d977970afc8d2a":
1167+ # ref: https://huggingface.co/inceptionai/Jais-2-8B-Chat
1168+ res = "jais-2"
11661169 if chkhsh == "7b3e7548e4308f52a76e8229e4e6cc831195d0d1df43aed21ac6c93da05fec5f":
11671170 # ref: https://huggingface.co/WisdomShell/CodeShell-7B
11681171 res = "codeshell"
@@ -3730,6 +3733,13 @@ class Ernie4_5Model(TextModel):
37303733 def set_vocab(self):
37313734 self._set_vocab_sentencepiece()
37323735
3736+ tokenizer_config_file = self.dir_model / 'tokenizer_config.json'
3737+ if tokenizer_config_file.is_file():
3738+ with open(tokenizer_config_file, "r", encoding="utf-8") as f:
3739+ tokenizer_config_json = json.load(f)
3740+ if "add_prefix_space" in tokenizer_config_json:
3741+ self.gguf_writer.add_add_space_prefix(tokenizer_config_json["add_prefix_space"])
3742+
37333743 def set_gguf_parameters(self):
37343744 super().set_gguf_parameters()
37353745
@@ -3739,6 +3749,10 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
37393749 if (head_dim := self.hparams.get("head_dim")) is None:
37403750 head_dim = self.hparams["hidden_size"] // num_heads
37413751
3752+ if "mlp_AR" in name or "vision_model" in name:
3753+ # skip vision model and projector tensors
3754+ return
3755+
37423756 if "ernie." in name:
37433757 name = name.replace("ernie.", "model.")
37443758 # split the qkv weights
@@ -3848,6 +3862,48 @@ def prepare_tensors(self):
38483862 raise ValueError(f"Unprocessed experts: {experts}")
38493863
38503864
3865+ @ModelBase.register("PaddleOCRVLForConditionalGeneration")
3866+ class PaddleOCRModel(Ernie4_5Model):
3867+ model_arch = gguf.MODEL_ARCH.PADDLEOCR
3868+
3869+
3870+ @ModelBase.register("PaddleOCRVisionModel")
3871+ class PaddleOCRVisionModel(MmprojModel):
3872+ # PaddleOCR-VL uses a modified version of Siglip
3873+ min_pixels: int = 0
3874+ max_pixels: int = 0
3875+
3876+ def __init__(self, *args, **kwargs):
3877+ super().__init__(*args, **kwargs)
3878+ assert self.hparams_vision is not None
3879+ self.min_pixels = self.preprocessor_config["min_pixels"]
3880+ self.max_pixels = self.preprocessor_config["max_pixels"]
3881+ self.hparams_vision["image_size"] = int(math.sqrt(self.max_pixels))
3882+
3883+ def set_gguf_parameters(self):
3884+ super().set_gguf_parameters()
3885+ assert self.hparams_vision is not None
3886+ hparams = self.hparams_vision
3887+ self.gguf_writer.add_clip_projector_type(gguf.VisionProjectorType.PADDLEOCR)
3888+ self.gguf_writer.add_vision_max_pixels(self.max_pixels)
3889+ self.gguf_writer.add_vision_min_pixels(self.min_pixels)
3890+ self.gguf_writer.add_vision_use_gelu(True)
3891+ self.gguf_writer.add_vision_attention_layernorm_eps(hparams.get("rms_norm_eps", 1e-6))
3892+
3893+ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
3894+ name = name.replace("visual.", "model.")
3895+
3896+ if "vision_model" in name or "mlp_AR" in name:
3897+ if "packing_position_embedding" in name:
3898+ return # unused
3899+ elif "vision_model.head" in name:
3900+ # we don't yet support image embeddings for this model
3901+ return
3902+ else:
3903+ yield from super().modify_tensors(data_torch, name, bid)
3904+ return # skip other tensors
3905+
3906+
38513907@ModelBase.register(
38523908 "Qwen2VLModel",
38533909 "Qwen2VLForConditionalGeneration",
@@ -8633,6 +8689,17 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
86338689 yield from super().modify_tensors(data_torch, name, bid)
86348690
86358691
8692+ @ModelBase.register("Jais2ForCausalLM")
8693+ class Jais2Model(TextModel):
8694+ model_arch = gguf.MODEL_ARCH.JAIS2
8695+
8696+ def set_gguf_parameters(self):
8697+ super().set_gguf_parameters()
8698+ hparams = self.hparams
8699+ head_dim = hparams.get("head_dim", hparams["hidden_size"] // hparams["num_attention_heads"])
8700+ self.gguf_writer.add_rope_dimension_count(head_dim)
8701+
8702+
86368703@ModelBase.register("JAISLMHeadModel")
86378704class JaisModel(TextModel):
86388705 model_arch = gguf.MODEL_ARCH.JAIS
0 commit comments