from os import PathLike
from pathlib import Path
from typing import cast
from ._lib import BpeModelBase
from .trainer import FileFormat, Unit, _resolve_format
class BpeModel:
def __init__(self, model: BpeModelBase) -> None:
self._model = model
@property
def unit(self) -> Unit:
return cast(Unit, self._model.unit)
@property
def vocab(self) -> dict[bytes, int]:
return dict(self._model.get_vocab().items())
def save_vocab_json(
self,
path: str | PathLike,
*,
format: FileFormat | None = None,
) -> None:
self._model.save_vocab(path, _resolve_format(self.unit, format))
def save_merges_txt(
self,
path: str | PathLike,
*,
format: FileFormat | None = None,
) -> None:
self._model.save_merges_txt(path, _resolve_format(self.unit, format))
def save(self, name: str, *, outdir: str | PathLike = ".", format: FileFormat | None = None) -> None:
vocab_path = Path(outdir) / f"vocab.{name}[{self.unit}].json"
merges_path = Path(outdir) / f"merges.{name}[{self.unit}].txt"
self.save_files(vocab_path, merges_path, format=format)
def save_files(
self,
vocab_path: str | PathLike,
merges_path: str | PathLike,
*,
format: FileFormat | None = None,
) -> None:
resolved_format = _resolve_format(self.unit, format)
self._model.save_vocab(vocab_path, resolved_format)
self._model.save_merges_txt(merges_path, resolved_format)