from tokenizers import pre_tokenizers from tokenizers.trainers import BpeTrainer from transformers import PreTrainedTokenizerFast from korbyte.comparison import Document, _kmmlu_test_files, _ranks, evaluate_tokenizer from korbyte.train import build_tokenizer def test_comparison_metrics_preserve_exact_text() -> None: tokenizer = build_tokenizer() tokenizer.train_from_iterator( ["한국어 테스트", "abc 123456"] * 4, trainer=BpeTrainer( vocab_size=1_000, min_frequency=1, initial_alphabet=pre_tokenizers.ByteLevel.alphabet(), ), ) fast = PreTrainedTokenizerFast(tokenizer_object=tokenizer) metrics = evaluate_tokenizer( fast, [Document("한국어 테스트", 2), Document("abc 123456", 2)], repeats=2, ) assert metrics.documents == 2 assert metrics.exact_document_ratio == 1.0 assert metrics.byte_fidelity == 1.0 assert metrics.unknown_token_ratio == 0.0 def test_ranks_lower_metrics_first() -> None: results = { "winner": {"metrics": {"fertility": 1.0}}, "runner-up": {"metrics": {"fertility": 1.2}}, "unavailable": {"error": "unsupported"}, } assert _ranks(results, "fertility") == {"winner": 1, "runner-up": 2} def test_kmmlu_loader_requires_all_subjects() -> None: class Api: def list_repo_files(self, *args, **kwargs): return [f"data/subject-{index}-test.csv" for index in range(45)] files = _kmmlu_test_files(Api()) assert len(files) == 45 assert files[0] == "data/subject-0-test.csv"