Auto-load tokenizer for merge rules
Browse files- generate_imatrix.py +17 -0
generate_imatrix.py
CHANGED
|
@@ -260,9 +260,26 @@ class SimpleTokenizer:
|
|
| 260 |
"""Minimal BPE tokenizer from GGUF metadata, with HPC acceleration."""
|
| 261 |
|
| 262 |
def __init__(self, model):
|
|
|
|
| 263 |
self.tokens = model.kv.get('tokenizer.ggml.tokens', [])
|
| 264 |
self.vocab_size = len(self.tokens)
|
| 265 |
merges_raw = model.kv.get('tokenizer.ggml.merges', [])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 266 |
self.bos_id = model.kv.get('tokenizer.ggml.bos_token_id', 2)
|
| 267 |
self.eos_id = model.kv.get('tokenizer.ggml.eos_token_id', 1)
|
| 268 |
|
|
|
|
| 260 |
"""Minimal BPE tokenizer from GGUF metadata, with HPC acceleration."""
|
| 261 |
|
| 262 |
def __init__(self, model):
|
| 263 |
+
self.model_path = model._f.name
|
| 264 |
self.tokens = model.kv.get('tokenizer.ggml.tokens', [])
|
| 265 |
self.vocab_size = len(self.tokens)
|
| 266 |
merges_raw = model.kv.get('tokenizer.ggml.merges', [])
|
| 267 |
+
|
| 268 |
+
# Override for models (like Mistral v0.3) where gguf merges are missing
|
| 269 |
+
if not merges_raw:
|
| 270 |
+
try:
|
| 271 |
+
import json, os
|
| 272 |
+
model_dir = os.path.dirname(os.path.abspath(self.model_path))
|
| 273 |
+
tok_path = os.path.join(model_dir, 'tokenizer.json')
|
| 274 |
+
if os.path.exists(tok_path):
|
| 275 |
+
with open(tok_path, 'r') as f:
|
| 276 |
+
tok_data = json.load(f)
|
| 277 |
+
merges_raw = tok_data.get('model', {}).get('merges', [])
|
| 278 |
+
if merges_raw:
|
| 279 |
+
print(f" Injected {len(merges_raw)} merges from local tokenizer.json!")
|
| 280 |
+
except Exception as e:
|
| 281 |
+
pass
|
| 282 |
+
|
| 283 |
self.bos_id = model.kv.get('tokenizer.ggml.bos_token_id', 2)
|
| 284 |
self.eos_id = model.kv.get('tokenizer.ggml.eos_token_id', 1)
|
| 285 |
|