[Frontend] Remove the slow tokenizer mode (#58545)
Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Harry Mellor committed
Sep 24, 2026 at 17:48 UTC
d636456b1f9cc77706543203ea0e66a7598e490e
12 files changed
+11
-39
benchmarks/backend_request_func.py
-4
@@ -630,10 +630,6 @@ def get_tokenizer(
630
pretrained_model_name_or_path
631
):
632
pretrained_model_name_or_path = get_model(pretrained_model_name_or_path)
633
- if tokenizer_mode == "slow":
634
- if kwargs.get("use_fast", False):
635
- raise ValueError("Cannot use the fast tokenizer in slow tokenizer mode.")
636
- kwargs["use_fast"] = False
633
if tokenizer_mode == "mistral":
634
try:
635
from vllm.tokenizers.mistral import MistralTokenizer
examples/generate/multimodal/vision_language_multi_image_offline.py
-1
@@ -55,7 +55,6 @@ def load_aria(question: str, image_urls: list[str]) -> ModelRequestData:
55
model_name = "rhymes-ai/Aria"
56
engine_args = EngineArgs(
57
model=model_name,
58
- tokenizer_mode="slow",
58
trust_remote_code=True,
59
dtype="bfloat16",
60
limit_mm_per_prompt={"image": len(image_urls)},
rust/src/bench/src/cli.rs
+1
-1
@@ -176,7 +176,7 @@ pub struct BenchServeArgs {
176
#[arg(long)]
177
pub tokenizer: Option<String>,
178
179
- /// Tokenizer mode (auto, hf, slow, mistral). Accepted for Python CLI
179
+ /// Tokenizer mode (auto, hf, mistral). Accepted for Python CLI
180
/// compatibility; non-auto values are ignored with a warning.
181
#[arg(long, default_value = "auto")]
182
pub tokenizer_mode: String,
tests/renderers/test_token_offsets.py
+1
-1
@@ -20,7 +20,7 @@ def fast_tokenizer():
20
"""gpt2 ships a Fast tokenizer; use it to test the offsets happy path."""
21
from transformers import AutoTokenizer
22
23
- return AutoTokenizer.from_pretrained("openai-community/gpt2", use_fast=True)
23
+ return AutoTokenizer.from_pretrained("openai-community/gpt2")
24
25
26
def _make_base_renderer_with(tokenizer):
tests/tokenizers_/test_basic.py
+1
-1
@@ -23,7 +23,7 @@ def _assert_tokenizer_like(tokenizer: object):
23
24
25
def test_tokenizer_like_protocol():
26
- tokenizer = get_tokenizer("openai-community/gpt2", use_fast=True)
26
+ tokenizer = get_tokenizer("openai-community/gpt2")
27
assert isinstance(tokenizer, TokenizersBackend)
28
_assert_tokenizer_like(tokenizer)
29
tests/tokenizers_/test_registry.py
+5
-16
@@ -69,21 +69,11 @@ def test_resolve_tokenizer_args_idempotent(runner_type):
69
)
70
71
72
-@pytest.mark.parametrize(
73
- ("tokenizer_mode", "input_kwargs"),
74
- [
75
- ("hf", {}),
76
- ("hf", {"mistral_format": False}),
77
- ("slow", {}),
78
- ("slow", {"mistral_format": False}),
79
- ],
80
-)
81
-def test_resolve_tokenizer_args_forces_hf_mistral_format_false(
82
- tokenizer_mode, input_kwargs
83
-):
72
+@pytest.mark.parametrize("input_kwargs", [{}, {"mistral_format": False}])
73
+def test_resolve_tokenizer_args_forces_hf_mistral_format_false(input_kwargs):
74
resolved_mode, _, _, kwargs = resolve_tokenizer_args(
75
"mistralai/Mistral-Nemo-Instruct-2407",
86
- tokenizer_mode=tokenizer_mode,
76
+ tokenizer_mode="hf",
77
**input_kwargs,
78
)
79
@@ -91,15 +81,14 @@ def test_resolve_tokenizer_args_forces_hf_mistral_format_false(
81
assert kwargs["mistral_format"] is False
82
83
94
-@pytest.mark.parametrize("tokenizer_mode", ["hf", "slow"])
95
-def test_resolve_tokenizer_args_rejects_hf_mistral_format_true(tokenizer_mode):
84
+def test_resolve_tokenizer_args_rejects_hf_mistral_format_true():
85
with pytest.raises(
86
ValueError,
87
match="mistral_format=True is not supported with tokenizer_mode='hf'",
88
):
89
resolve_tokenizer_args(
90
"mistralai/Mistral-Nemo-Instruct-2407",
102
- tokenizer_mode=tokenizer_mode,
91
+ tokenizer_mode="hf",
92
mistral_format=True,
93
)
94
vllm/benchmarks/serve.py
-1
@@ -1695,7 +1695,6 @@ def add_cli_args(parser: FlexibleArgumentParser):
1695
- "auto" will use the tokenizer from `mistral_common` for Mistral models
1696
if available, otherwise it will use the "hf" tokenizer.\n
1697
- "hf" will use the fast tokenizer if available.\n
1698
- - "slow" will always use the slow tokenizer.\n
1698
- "mistral" will always use the tokenizer from `mistral_common`.\n
1699
- "deepseek_v32" will always use the tokenizer from `deepseek_v32`.\n
1700
- Other custom values can be supported via plugins.""",
vllm/config/model.py
-2
@@ -89,7 +89,6 @@ ConvertOption = Literal["auto", ConvertType]
89
TokenizerMode = Literal[
90
"auto",
91
"hf",
92
- "slow",
92
"mistral",
93
"deepseek_v32",
94
"deepseek_v4",
@@ -148,7 +147,6 @@ class ModelConfig:
147
- "auto" will use the tokenizer from `mistral_common` for Mistral models
148
if available, otherwise it will use the "hf" tokenizer.
149
- "hf" will use the fast tokenizer if available.
151
- - "slow" will always use the slow tokenizer.
150
- "mistral" will always use the tokenizer from `mistral_common`.
151
- "deepseek_v32" will always use the tokenizer from `deepseek_v32`.
152
- "deepseek_v4" will always use the tokenizer from `deepseek_v4`.
vllm/entrypoints/llm.py
+2
-2
@@ -76,8 +76,8 @@ class LLM(BeamSearchOfflineMixin, PoolingOfflineMixin, OfflineInferenceMixin):
76
Args:
77
model: The name or path of a HuggingFace Transformers model.
78
tokenizer: The name or path of a HuggingFace Transformers tokenizer.
79
- tokenizer_mode: The tokenizer mode. "auto" will use the fast tokenizer
80
- if available, and "slow" will always use the slow tokenizer.
79
+ tokenizer_mode: The tokenizer mode. See
80
+ [ModelConfig.tokenizer_mode][vllm.config.ModelConfig.tokenizer_mode].
81
skip_tokenizer_init: If true, skip initialization of tokenizer and
82
detokenizer. Expect valid prompt_token_ids and None for prompt
83
from the input.
vllm/renderers/hf.py
+1
-2
@@ -966,8 +966,7 @@ class HfRenderer(BaseRenderer[HfTokenizer]):
966
)
967
968
def _can_produce_offsets(self) -> bool:
969
- # HF tokenizers may be slow (use_fast=False); only fast tokenizers
970
- # expose offset_mapping.
969
+ # Only fast tokenizers expose offset_mapping.
970
return self.tokenizer is not None and self.tokenizer.is_fast
971
972
def render_messages(
vllm/tokenizers/registry.py
-7
@@ -145,13 +145,6 @@ def resolve_tokenizer_args(
145
else:
146
assert_never(runner_type)
147
148
- if tokenizer_mode == "slow":
149
- if kwargs.get("use_fast", False):
150
- raise ValueError("Cannot use the fast tokenizer in slow tokenizer mode.")
151
-
152
- tokenizer_mode = "hf"
153
- kwargs["use_fast"] = False
154
-
148
# Try to use official Mistral tokenizer if possible
149
if (
150
tokenizer_mode == "auto"
vllm/transformers_utils/processors/moondream3.py
-1
@@ -209,7 +209,6 @@ class Moondream3Processor(ProcessorMixin):
209
"revision",
210
"subfolder",
211
"token",
212
- "use_fast",
212
):
213
if key in kwargs:
214
tokenizer_kwargs[key] = kwargs[key]