| """Shared, pinned configuration for reproducible KorByte builds.""" |
|
|
| from __future__ import annotations |
|
|
| from dataclasses import asdict, dataclass |
| from pathlib import Path |
| from typing import Any |
|
|
| CORE_VOCAB_SIZE = 128_000 |
| SPECIAL_TOKEN_COUNT = 256 |
| TOTAL_VOCAB_SIZE = CORE_VOCAB_SIZE + SPECIAL_TOKEN_COUNT |
| DEFAULT_SEED = 20260804 |
| DEFAULT_MODEL_MAX_LENGTH = 32_768 |
| DEFAULT_REPOSITORY_ID = "dawncr0w/KorByte-128K" |
| KANANA_MODEL_ID = "kakaocorp/kanana-2-3b-base" |
| KANANA_REVISION = "9fa2a678c379700868d72685a22ea8ed0263ef33" |
| KLUE_REVISION = "349481ec73fff722f88e0453ca05c77a447d967c" |
| PUBLIC_BENCHMARK_ID = "eduagarcia/multilingual_tokenizer_benchmark" |
| PUBLIC_BENCHMARK_REVISION = "74fa5907af0265f42c09e21379bf21847e066990" |
| KMMLU_ID = "HAERAE-HUB/KMMLU" |
| KMMLU_REVISION = "d61b3f19e552c576bf5960dd24289763edc36a88" |
|
|
|
|
| @dataclass(frozen=True) |
| class BaselineSpec: |
| """A public tokenizer artifact pinned for comparative evaluation.""" |
|
|
| key: str |
| model_id: str |
| revision: str |
|
|
|
|
| COMPARISON_BASELINES = ( |
| BaselineSpec("ax-4.0", "skt/A.X-4.0", "a3393fd67bf09a34a85e66dfd2c2da61c4497b67"), |
| BaselineSpec( |
| "trillion-7b", |
| "trillionlabs/Trillion-7B-preview", |
| "bc1650c5a954c7de0509d28c8dbc5bea560856e1", |
| ), |
| BaselineSpec( |
| "midm-2.0", |
| "K-intelligence/Midm-2.0-Base-Instruct", |
| "35479c5fc9a18a5db7cc6dbadcf1db68db7beab0", |
| ), |
| BaselineSpec( |
| "k-exaone", |
| "LGAI-EXAONE/K-EXAONE-236B-A23B", |
| "61e6d578eb102b578e5704e2916ac841df9eca0a", |
| ), |
| BaselineSpec( |
| "solar-pro3", |
| "upstage/solar-pro3-tokenizer", |
| "c41b71f0519c580610cb0fd2af4ed2b23cad544f", |
| ), |
| BaselineSpec( |
| "thunder", |
| "thunder-research-group/Llama-Thunder-LLM-8B", |
| "ecfd6c909944939ae42982f3d87cf36898da308b", |
| ), |
| BaselineSpec( |
| "kanana-2", |
| KANANA_MODEL_ID, |
| KANANA_REVISION, |
| ), |
| BaselineSpec( |
| "hyperclovax", |
| "naver-hyperclovax/HyperCLOVAX-SEED-Think-32B", |
| "a6cdfd3464d1b767259cad23e164eaf39d3e3960", |
| ), |
| ) |
|
|
|
|
| @dataclass(frozen=True) |
| class SourceSpec: |
| """A deterministic slice of a public corpus.""" |
|
|
| key: str |
| dataset_id: str |
| config_name: str |
| split: str |
| revision: str |
| license_id: str |
| source_url: str |
| text_field: str = "text" |
| character_budget: int = 0 |
| min_target_script_ratio: float = 0.0 |
| target_script: str = "any" |
| shuffle_buffer: int = 10_000 |
|
|
| def as_dict(self) -> dict[str, Any]: |
| return asdict(self) |
|
|
|
|
| DEFAULT_SOURCES = ( |
| SourceSpec( |
| key="fineweb2_korean", |
| dataset_id="HuggingFaceFW/fineweb-2", |
| config_name="kor_Hang", |
| split="train", |
| revision="af9c13333eb981300149d5ca60a8e9d659b276b9", |
| license_id="ODC-By-1.0", |
| source_url="https://huggingface.co/datasets/HuggingFaceFW/fineweb-2", |
| character_budget=500_000_000, |
| min_target_script_ratio=0.25, |
| target_script="hangul", |
| ), |
| SourceSpec( |
| key="wikipedia_korean", |
| dataset_id="wikimedia/wikipedia", |
| config_name="20231101.ko", |
| split="train", |
| revision="b04c8d1ceb2f5cd4588862100d08de323dccfbaa", |
| license_id="CC-BY-SA-3.0-and-GFDL", |
| source_url="https://huggingface.co/datasets/wikimedia/wikipedia", |
| character_budget=150_000_000, |
| min_target_script_ratio=0.20, |
| target_script="hangul", |
| ), |
| SourceSpec( |
| key="wikipedia_english", |
| dataset_id="wikimedia/wikipedia", |
| config_name="20231101.en", |
| split="train", |
| revision="b04c8d1ceb2f5cd4588862100d08de323dccfbaa", |
| license_id="CC-BY-SA-3.0-and-GFDL", |
| source_url="https://huggingface.co/datasets/wikimedia/wikipedia", |
| character_budget=50_000_000, |
| min_target_script_ratio=0.60, |
| target_script="latin", |
| ), |
| ) |
|
|
|
|
| @dataclass(frozen=True) |
| class Paths: |
| """Project paths derived from one repository root.""" |
|
|
| root: Path |
|
|
| @property |
| def corpus(self) -> Path: |
| return self.root / "data" / "train.txt" |
|
|
| @property |
| def corpus_manifest(self) -> Path: |
| return self.root / "provenance" / "corpus_manifest.json" |
|
|
| @property |
| def build_manifest(self) -> Path: |
| return self.root / "provenance" / "build_manifest.json" |
|
|
| @property |
| def benchmark_json(self) -> Path: |
| return self.root / "reports" / "benchmark.json" |
|
|
| @property |
| def benchmark_markdown(self) -> Path: |
| return self.root / "reports" / "benchmark.md" |
|
|
| @property |
| def comparison_json(self) -> Path: |
| return self.root / "reports" / "comparison.json" |
|
|
| @property |
| def comparison_markdown(self) -> Path: |
| return self.root / "reports" / "comparison.md" |
|
|
| @property |
| def validation_json(self) -> Path: |
| return self.root / "reports" / "validation.json" |
|
|
|
|
| def project_root() -> Path: |
| return Path(__file__).resolve().parents[2] |
|
|