"""Chronicle tokenizer: a thin wrapper over a pickled tiktoken encoding.""" import os import pickle from functools import lru_cache class ChronicleTokenizer: """131k-vocabulary BPE tokenizer (tiktoken encoding, trained from scratch).""" def __init__(self, enc, bos_token="<|bos|>"): self.enc = enc self.bos_token_id = self.encode_special(bos_token) @classmethod def from_directory(cls, tokenizer_dir): with open(os.path.join(tokenizer_dir, "tokenizer.pkl"), "rb") as f: return cls(pickle.load(f)) def get_vocab_size(self): return self.enc.n_vocab @lru_cache(maxsize=32) def encode_special(self, text): return self.enc.encode_single_token(text) def get_bos_token_id(self): return self.bos_token_id def encode(self, text): return self.enc.encode_ordinary(text) def decode(self, ids): return self.enc.decode(ids)