Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đã đóng Phù hợp với người mới
#1,323 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
88/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
kotlin
Lĩnh vực
ai, backend

Hướng nghiên cứu

Mở skainet-io/skainet-io-core/src/commonMain/kotlin/sk/ainet/io/tokenizer/QwenByteLevelBpeTokenizer.kt ở khoảng dòng 243–255 và đọc cách các mục merge được phân tích. Sau đó kiểm tra skainet-io/skainet-io-core/src/commonTest/kotlin/sk/ainet/io/tokenizer/TokenizerFactoryDispatchTest.kt, đặc biệt là bài kiểm tra dispatch BPE Tokenizer JSON hiện có. Hoàn tất khi các merge dạng mảng được tải và mã hóa mẫu thành [3, 2], các mảng không hợp lệ gây ra IllegalArgumentException rõ ràng, và các bài kiểm tra JVM đều đạt.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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".

Ngôn ngữ chính
Kotlin
Star
52
Fork
15
Merge trung bình
1 ngày 8 giờ
Pull request đã merge (30 ngày)
37

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của SKaiNET-developers/SKaiNET

Tất cả issue của SKaiNET-developers/SKaiNET

Issue tương tự

Thêm issue về Kotlin

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.