{"record":{"id":"cf6106a3d0a6030d","repo":"sgl-project/sglang","slug":"cannot-use-the-fast-tokenizer-in-slow-tokenizer-mo","errorCode":null,"errorMessage":"Cannot use the fast tokenizer in slow tokenizer mode.","messagePattern":"Cannot use the fast tokenizer in slow tokenizer mode\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/utils/hf_transformers/tokenizer.py","lineNumber":491,"sourceCode":"    tokenizer_mode: str = \"auto\",\n    trust_remote_code: bool = False,\n    tokenizer_revision: Optional[str] = None,\n    tokenizer_backend: str = \"huggingface\",\n    **kwargs,\n) -> Union[PreTrainedTokenizer, PreTrainedTokenizerFast]:\n    \"\"\"Gets a tokenizer for the given model name via Huggingface.\"\"\"\n    # Tiktoken format has its own backend — no fastokens patching needed.\n    if tokenizer_name.endswith(\".json\"):\n        from sglang.srt.tokenizer.tiktoken_tokenizer import TiktokenTokenizer\n\n        return TiktokenTokenizer(tokenizer_name)\n\n    if tokenizer_backend == \"fastokens\":\n        _ensure_fastokens_patched()\n\n    if tokenizer_mode == \"slow\":\n        if kwargs.get(\"use_fast\", False):\n            raise ValueError(\"Cannot use the fast tokenizer in slow tokenizer mode.\")\n        kwargs[\"use_fast\"] = False\n    elif tokenizer_mode == \"auto\":\n        # Transformers v5 AutoTokenizer ignores use_fast (always fast), but\n        # some code paths pass kwargs to non-AutoTokenizer loaders where\n        # use_fast still matters. Set explicitly for those fallback paths.\n        if \"use_fast\" not in kwargs:\n            kwargs[\"use_fast\"] = True\n\n    if (\n        check_gguf_file(tokenizer_name)\n        and gguf_sidecar_dir(tokenizer_name, \"tokenizer_config.json\") is None\n        and has_native_gguf_support(tokenizer_name)\n    ):\n        _ensure_gguf_version()\n        tokenizer = build_gguf_tokenizer(tokenizer_name)\n        _fix_special_tokens_pattern(tokenizer)\n        attach_additional_stop_token_ids(tokenizer)\n        return patch_tokenizer(tokenizer)","sourceCodeStart":473,"sourceCodeEnd":509,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/utils/hf_transformers/tokenizer.py#L473-L509","documentation":"SGLang's get_tokenizer raises this when the server is configured with --tokenizer-mode=slow but the caller also passes use_fast=True in the tokenizer kwargs. The slow mode explicitly forces use_fast=False, and passing an explicit conflicting True is treated as a configuration error rather than silently ignored.","triggerScenarios":"Calling get_tokenizer()/get_processor() with tokenizer_mode=\"slow\" while kwargs contains {\"use_fast\": True} — e.g., a launcher or config that sets both --tokenizer-mode slow and a fast-tokenizer flag.","commonSituations":"Users switching to slow tokenizer mode (often to work around a fast-tokenizer bug or missing tokenizers library) while a config file, env-derived kwarg, or wrapper still sets use_fast=True. Custom model loaders that always pass use_fast=True.","solutions":["Remove use_fast=True from kwargs (or set use_fast=False) when tokenizer_mode is \"slow\".","Change --tokenizer-mode to \"auto\" or \"fast\" if the fast tokenizer is actually wanted.","If wrapping get_tokenizer, sanitize kwargs: kwargs.setdefault(\"use_fast\", False) and never override it in slow mode."],"exampleFix":"# before\nget_tokenizer(\"meta-llama/Llama-3-8B\", tokenizer_mode=\"slow\", use_fast=True)\n\n# after\nget_tokenizer(\"meta-llama/Llama-3-8B\", tokenizer_mode=\"slow\", use_fast=False)","handlingStrategy":"validation","validationCode":"kwargs.pop(\"use_fast\", None)\nif tokenizer_mode == \"slow\":\n    kwargs[\"use_fast\"] = False","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never pass use_fast when tokenizer_mode is fixed by CLI flags.","Centralize tokenizer kwargs construction in one place and assert consistency."],"tags":["tokenizer","configuration","sglang"],"backgroundTag":"invalid-configuration-combination","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}