Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Lane 2 · kotlin-core] tokenizer.json parity — accept the array form of model.merges

Chiusa Adatta ai principianti
#1,323 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
88/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
kotlin
Ambito
ai, backend

Direzione di ricerca

Apri skainet-io/skainet-io-core/src/commonMain/kotlin/sk/ainet/io/tokenizer/QwenByteLevelBpeTokenizer.kt intorno alle righe 243–255 e leggi come vengono analizzate le voci di merge. Poi esamina skainet-io/skainet-io-core/src/commonTest/kotlin/sk/ainet/io/tokenizer/TokenizerFactoryDispatchTest.kt, in particolare il test esistente di dispatch BPE del JSON del tokenizer. Il lavoro è completato quando i merge in formato array vengono caricati e il campione viene codificato come [3, 2], gli array malformati generano una IllegalArgumentException chiara e i test JVM passano.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

coding good first issue size:xs skill:kotlin-core sub-issue

Sub-issue of #1321 (HF tokenizer.json parity for BPE encoders).

Lane: 2 · Kotlin core
Skill needed: Kotlin and kotlinx.serialization.json basics. No tokenizer or tensor knowledge needed — the fix is a when branch.
Size: xs (under an hour including the test)
Blocked by: nothing

What to do

  1. Open QwenByteLevelBpeTokenizer.kt#L243-L255. Today each merge entry is read with el.jsonPrimitive.content and split on the first space. the Hugging Face tokenizers Python library (PyPI) writes merges as two-element arrays since its 0.20 release, [["Ġ", "Ġ"], ["a", "b"], …], so jsonPrimitive throws IllegalArgumentException: Element class kotlinx.serialization.json.JsonArray … is not a JsonPrimitive and the whole tokenizer fails to load.
  2. Add an is JsonArray branch: require exactly two elements and map them to first to second. Keep the string branch as is (older files and GGUF still use "a b"). Keep the existing is JsonObject -> error(...) branch.
  3. In TokenizerFactoryDispatchTest.kt copy the test tokenizer_json BPE dispatches to byte level BPE and change only "merges": ["a b"] to "merges": [["a", "b"]]. Expected ids for "ab<|end|>" are the same, [3, 2]. Add a second test asserting that a one-element or three-element array throws a clear IllegalArgumentException.
  4. Run ./gradlew :skainet-io:skainet-io-core:jvmTest (fast) and, if you have the toolchain, :skainet-io:skainet-io-core:linuxX64Test.
  5. Add a line under [Unreleased] in CHANGELOG.md and open a PR from feature/<issue-number>-tokenizer-json-array-merges referencing this issue.

Acceptance

  • The synthetic array-form file in the new test loads and encodes to [3, 2]
  • Both published Laya files (ModernBERT, mmBERT) load without rewriting their merges (ids are still wrong for other reasons — that is the sibling lanes' job, not this one's)
  • Existing jvmTest green
  • Result reported back on #1321

Notes

Reproduction with a 0.57.0 BOM project: feed the JSON below to sk.ainet.io.tokenizer.TokenizerFactory.fromTokenizerJson; it throws today and should return a tokenizer that encodes ab<|end|> to [3, 2].

{"version":"1.0","added_tokens":[{"id":2,"content":"<|end|>","special":true}],
 "model":{"type":"BPE","vocab":{"a":0,"b":1,"<|end|>":2,"ab":3},"merges":[["a","b"]]}}

Why both forms matter: the string form is ambiguous when a token itself contains a space; the array form is what every tokenizers release since 0.20 writes (verified with 0.20.3 and the current 0.23.3), while the string form is still accepted on read. The GGUF path (fromGgufFields) is unaffected — GGUF always stores "a b".

Lingua principale
Kotlin
Stelle
52
Fork
15
Merge medio
1g 8h
PR unite (30g)
37

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di SKaiNET-developers/SKaiNET

Tutte le issue di SKaiNET-developers/SKaiNET

Issue simili

Altre issue su Kotlin

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.