from __future__ import annotations import json from pathlib import Path from typing import Dict, Iterable, List, Tuple from .pair_stats import Pair, Token def save_tokenizer(path: str, merges: Dict[Pair, Token], vocab: Dict[Token, int]) -> None: payload = { "merges": [[a, b, merged] for (a, b), merged in merges.items()], "vocab": vocab, } Path(path).write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8") def load_tokenizer(path: str) -> Tuple[Dict[Pair, Token], Dict[Token, int]]: payload = json.loads(Path(path).read_text(encoding="utf-8")) merges = {(a, b): merged for a, b, merged in payload.get("merges", [])} vocab = payload.get("vocab", {}) return merges, vocab