Blocked on #373 (which makes unknown tokenizer.ggml.pre loud). This issue adds the two missing Qwen entries once that lands.
Problem
src/DotLLM.Tokenizers/Bpe/TiktokenPreTokenizer.cs:86-92 covers only gpt2, llama3, the starcoder family, deepseek-llm, deepseek-coder and gpt-4o. Both Qwen values are absent:
tokenizer.ggml.pre |
Models affected |
qwen35 |
Qwen3.8-27B, Qwen3.6/3.5 hybrids (Bonsai family) |
qwen2 |
Every Qwen2/Qwen3 GGUF dotLLM has ever loaded |
Unknown values fall through _ => null, which means no pre-tokenization at all — BPE merges run across the whole input and cross boundaries the model was trained to respect. The file's own doc comment at :75-83 names this as the issue-#237 failure mode.
qwen2 is the alarming one: it is not a new-model gap, it is a pre-existing, silent, retroactive defect affecting prior Qwen measurements.
Why this gates measurement
#237 quantified tokenizer drift alone at +3.46% PPL on wikitext-2 (24.84 vs 24.01). Any perplexity or quality number taken on an affected model before this lands is measuring tokenization, not the kernel under test.
Acceptance criteria
Context
.docs/model-target-qwen3.8-27b.md gap 1. Sibling of #387 (tekken) and the pixtral half of #373.
Blocked on #373 (which makes unknown
tokenizer.ggml.preloud). This issue adds the two missing Qwen entries once that lands.Problem
src/DotLLM.Tokenizers/Bpe/TiktokenPreTokenizer.cs:86-92covers onlygpt2,llama3, the starcoder family,deepseek-llm,deepseek-coderandgpt-4o. Both Qwen values are absent:tokenizer.ggml.preqwen35qwen2Unknown values fall through
_ => null, which means no pre-tokenization at all — BPE merges run across the whole input and cross boundaries the model was trained to respect. The file's own doc comment at:75-83names this as the issue-#237 failure mode.qwen2is the alarming one: it is not a new-model gap, it is a pre-existing, silent, retroactive defect affecting prior Qwen measurements.Why this gates measurement
#237 quantified tokenizer drift alone at +3.46% PPL on wikitext-2 (24.84 vs 24.01). Any perplexity or quality number taken on an affected model before this lands is measuring tokenization, not the kernel under test.
Acceptance criteria
qwen35andqwen2resolve to their correct pipelines, with regexes copied verbatim from llama.cppsrc/llama-vocab.cpp(LLAMA_VOCAB_PRE_TYPE_QWEN2/..._QWEN35) — do not infer or paraphrase them.gpt2andllama3routing on an input where they differ. A test that passes under the wrong pipeline is worthless — seeCLAUDE.mdon discriminating tests.qwen35GGUF and oneqwen2GGUF.docs/TOKENIZERS.mdlists supportedprevalues.Context
.docs/model-target-qwen3.8-27b.mdgap 1. Sibling of #387 (tekken) and thepixtralhalf of #373.