[Lane 2 · kotlin-core] tokenizer.json parity — Metaspace BPE with byte fallback (encode side of #912)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 55/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- kotlin
- Área
- machine-learning
Línea de trabajo
Start by reading TokenizerFactory.fromTokenizerJson, QwenByteLevelBpeTokenizer, and the existing bpeMerge implementation; the issue describes the needed Metaspace behavior and dispatch rules. Reuse the byte-token lookup and decode logic in SentencePieceTokenizer, then add the synthetic dispatch test and Moonshine decode fixture in the named tests. Done means the specified fixtures pass on JVM and linuxX64, Qwen tests remain unchanged, and results are reported on #1321.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Sub-issue of #1321 (HF tokenizer.json parity for BPE encoders).
Lane: 2 · Kotlin core
Skill needed: Kotlin, and you should understand BPE merging (the existing bpeMerge in QwenByteLevelBpeTokenizer is 20 lines and is the algorithm). Familiarity with the SentencePiece ▁ convention helps.
Size: m (1–2 days)
Blocked by: the array-merges lane (the mmBERT file does not load without it). Independent of the normalizer lane, but the mmBERT file also declares Replace(" " → "▁"), so run the fixture after both land.
What to do
- Today
TokenizerFactory.fromTokenizerJsonsends everymodel.type: "BPE"file toQwenByteLevelBpeTokenizer, which (a) splits with the GPT-2 regex, (b) maps UTF-8 bytes to the GPT-2 unicode alphabet, (c) merges by rank. Forpre_tokenizer: Metaspacefiles (Llama, Gemma HF exports, mmBERT) steps (a) and (b) are wrong: the alphabet is plain code points with▁for space, and characters missing from the vocab fall back to<0xNN>byte tokens whenmodel.byte_fallbackis true. Every word boundary in the mmBERT file currently becomes id 241753. - Separate the merge-rank BPE core from the alphabet step. Suggested shape: keep
QwenByteLevelBpeTokenizeras the ByteLevel configuration and add aMetaspaceBpeTokenizer(or a strategy parameter) that: replaces" "with▁; honoursprepend_scheme(always→ prepend▁to the text;first→ only to the first segment;never); splits on▁boundaries whensplit: true; runs the same rank-basedbpeMerge; and emits<0xNN>ids for any symbol not in the vocab whenbyte_fallbackis true (fuse_unkotherwise).SentencePieceTokenizeralready has the<0xNN>lookup and decode — reuse, don't copy. - Dispatch in
TokenizerFactory.fromTokenizerJsononpre_tokenizer.type(Metaspace→ new class,ByteLevelor absent → existing class,Sequence→ inspect members). - Decode:
▁→ space,<0xNN>runs → bytes, matching the file'sdecoder: Sequence[Replace, ByteFallback, Fuse]. This is the crash reported in #912 (decode: token '▁Ever' contains non-byte-level char U+2581); add that issue's fixture (decode([18274, 1898, 29973, 2])→"Ever tried?"on the Moonshine v2 file) as a test. - Tests: synthetic Metaspace file in
TokenizerFactoryDispatchTest(3-token vocab, one merge, one<0x..>fallback); then the mmBERT fixture via the Lane 4 goldens. Run./gradlew :skainet-io:skainet-io-core:jvmTest :skainet-io:skainet-io-core:linuxX64Test.
Acceptance
- mmBERT file (multilingual/tokenizer/tokenizer.json) encodes all five #1321 fixture texts identically to the reference; e.g.
"Which department handles this request?"→[12236, 9888, 26446, 736, 3853, 235336] - #912 decode fixture passes on JVM and
linuxX64Test -
bosTokenId/eosTokenIdcome fromadded_tokens(<bos>=2,<eos>=1 in the mmBERT file) - Qwen fixture tests (
QwenByteLevelBpeTokenizerFixtureTest) unchanged - Result reported back on #1321
Notes
If the refactor forces a new public class or changes the Tokenizer interface, stop and say so on #1321 — that trips the SKEEP trigger ("public Kotlin API") and the maintainers decide whether a short SKEEP is needed before the PR. Llama 3 files additionally set ignore_merges: true (vocab lookup of the whole word before merging); note whether you handled it, a follow-up issue is fine.
- Lenguaje dominante
- Kotlin
- Estrellas
- 52
- Forks
- 15
- Merge medio
- 1 d 15 h
- PR fusionados (30 d)
- 36
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de SKaiNET-developers/SKaiNET
-
coding good first issue size:xs skill:kotlin-core sub-issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
SKaiNET-developers/SKaiNET#1323 ·
Los mantenedores suelen responder en 1 día
-
coding good first issue platform size:xs skill:js sub-issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
SKaiNET-developers/SKaiNET#1232 ·
Los mantenedores suelen responder en 1 día
-
skeep tracking
Dificultad 5/5 Más de una semana Aptitud para principiantes 15/100
SKaiNET-developers/SKaiNET#1331 ·
Los mantenedores suelen responder en 1 día
-
assessment size:s skill:review sub-issue
Dificultad 4/5 1-2 días Aptitud para principiantes 18/100
SKaiNET-developers/SKaiNET#1330 ·
Los mantenedores suelen responder en 1 día
-
documentation good first issue size:s skill:docs sub-issue
Dificultad 3/5 1-2 días Aptitud para principiantes 78/100
SKaiNET-developers/SKaiNET#1329 ·
Los mantenedores suelen responder en 1 día
Todos los issues de SKaiNET-developers/SKaiNET
Issues similares
-
[Submission] 抖音火山版Abiertosubmit-adaption submit-adaption-pre
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
BetterAndroid/android-notification-icon-project#744 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
utopia-rise/godot-jvm#1004 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
pedroSG94/RootEncoder#2213 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
[Feature]: AC charger voltageAbiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
dzid26/TeslaBatteryBLE#183 ·
Los mantenedores suelen responder en 1 día