Download tetu_code/tokenizer.py from tetu-AI/Tetu-Code-2: direct link, hf CLI and curl.
- Browser
- Download file 1.29 kB
-
https://huggingface.co/tetu-AI/Tetu-Code-2/resolve/main/tetu_code/tokenizer.py
- Command line
-
hf download hf://tetu-AI/Tetu-Code-2/tetu_code/tokenizer.py
-
curl -L -o tokenizer.py https://huggingface.co/tetu-AI/Tetu-Code-2/resolve/main/tetu_code/tokenizer.py
1.29 kB
| # Têtu Code 2 — inference code (tetu-AI). License: Apache 2.0, see README.md. | |
| from tokenizers import Regex, Tokenizer, decoders, models, pre_tokenizers, trainers | |
| SPECIALS = ['<|pad|>', '<|eos|>', '<|system|>', '<|user|>', '<|assistant|>', '<|tool|>', '<|call|>', '<|/call|>', '<|fim_prefix|>', '<|fim_suffix|>', '<|fim_middle|>', '<|file|>', '<|repo|>', '<|think|>', '<|/think|>', '<|trace|>', '<|/trace|>', '<|tools|>', '<|commit|>', '<|arg|>', '<|end|>'] + [f'<|reserved_{i}|>' for i in range(2, 16)] | |
| PATTERN = '\\r?\\n[ \\t]*|\\p{N}| ?[\\p{L}\\p{M}_]+| ?[^\\s\\p{L}\\p{M}\\p{N}_]+|[ \\t]+|\\s' | |
| VOCAB = 32768 | |
| def new_tokenizer(): | |
| tok = Tokenizer(models.BPE()) | |
| tok.pre_tokenizer = pre_tokenizers.Sequence([pre_tokenizers.Split(Regex(PATTERN), behavior='isolated'), pre_tokenizers.ByteLevel(add_prefix_space=False, use_regex=False)]) | |
| tok.decoder = decoders.ByteLevel() | |
| return tok | |
| def train(texts, vocab=VOCAB, length=None): | |
| tok = new_tokenizer() | |
| trainer = trainers.BpeTrainer(vocab_size=vocab, min_frequency=2, special_tokens=SPECIALS, show_progress=False, initial_alphabet=pre_tokenizers.ByteLevel.alphabet(), max_token_length=32) | |
| tok.train_from_iterator(texts, trainer, length=length) | |
| return tok | |
| def load(path): | |
| return Tokenizer.from_file(str(path)) | |