Skip to content
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
f73bafb
[Renderer] Introduce Renderer
DarkLight1337 Dec 7, 2025
b7222cb
Simplify
DarkLight1337 Dec 7, 2025
4c81f01
Move simplify
DarkLight1337 Dec 7, 2025
4a37cda
Typo
DarkLight1337 Dec 7, 2025
3d11a96
Set the tokenizer name
DarkLight1337 Dec 7, 2025
e66ebd8
Simplify
DarkLight1337 Dec 7, 2025
02e64f5
Fix init
DarkLight1337 Dec 7, 2025
d8177a1
Reuse code
DarkLight1337 Dec 7, 2025
a00c164
Type checking
DarkLight1337 Dec 7, 2025
8a931d7
Cached
DarkLight1337 Dec 7, 2025
6909fe7
Fix mypy
DarkLight1337 Dec 7, 2025
942c94d
Allow `tokenizer=None`
DarkLight1337 Dec 7, 2025
86d1104
Handle tokenize
DarkLight1337 Dec 7, 2025
4be9517
Ignore mypy
DarkLight1337 Dec 7, 2025
bab3ff9
Fix
DarkLight1337 Dec 7, 2025
a40c5e4
Fix mypy
DarkLight1337 Dec 7, 2025
7652853
Fix
DarkLight1337 Dec 7, 2025
c709ef9
Fix
DarkLight1337 Dec 7, 2025
7b9aa93
mypy
DarkLight1337 Dec 7, 2025
4555841
Fix tests
DarkLight1337 Dec 7, 2025
8ebde23
Simplify
DarkLight1337 Dec 7, 2025
2ff7532
Fix mypy
DarkLight1337 Dec 7, 2025
2f2aaf7
Update imports
DarkLight1337 Dec 7, 2025
05e9b46
Fix
DarkLight1337 Dec 7, 2025
10460d6
Fix
DarkLight1337 Dec 7, 2025
49d10ff
Simplify
DarkLight1337 Dec 7, 2025
41d5ffa
Rename
DarkLight1337 Dec 7, 2025
06ff811
Fix
DarkLight1337 Dec 7, 2025
cd8c8fb
Fix test
DarkLight1337 Dec 7, 2025
fe2fbc9
Fix wrong truncation side
DarkLight1337 Dec 8, 2025
f7c1b2b
Update
DarkLight1337 Dec 8, 2025
ddd9590
Remove `RequestPrompt`
DarkLight1337 Dec 8, 2025
ed3fd86
Simplify
DarkLight1337 Dec 8, 2025
10814a7
Fix
DarkLight1337 Dec 8, 2025
67e5f7b
Comment
DarkLight1337 Dec 8, 2025
88700ee
Reword
DarkLight1337 Dec 8, 2025
e8787f7
Unnecessary lazy import
DarkLight1337 Dec 8, 2025
9dca5eb
Simplify
DarkLight1337 Dec 8, 2025
854ac77
Reduce diff
DarkLight1337 Dec 8, 2025
06d1f87
Fix
DarkLight1337 Dec 8, 2025
461dc61
Fix
DarkLight1337 Dec 8, 2025
0a86c22
Fix mypy and test
DarkLight1337 Dec 8, 2025
35d36fe
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 8, 2025
5991f7b
Update tests
DarkLight1337 Dec 8, 2025
38ad20b
Update tests
DarkLight1337 Dec 8, 2025
dc6ed06
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 8, 2025
89cbe7e
Move more tests
DarkLight1337 Dec 9, 2025
07aefa1
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 9, 2025
63d6961
Update misc
DarkLight1337 Dec 9, 2025
478b89e
Update
DarkLight1337 Dec 9, 2025
ef183e8
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 10, 2025
8f619da
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 10, 2025
e6d5703
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 10, 2025
bd62632
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 11, 2025
e4b89bf
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 13, 2025
5728381
Delay deprecation
DarkLight1337 Dec 13, 2025
61496c6
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 13, 2025
f9f0c5b
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 13, 2025
9cd0992
Fix test
DarkLight1337 Dec 14, 2025
2966a56
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 14, 2025
f332bc3
Try rm
DarkLight1337 Dec 14, 2025
01e419d
fix
DarkLight1337 Dec 14, 2025
93f9af1
temp
DarkLight1337 Dec 15, 2025
1c00100
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 15, 2025
ca73a02
Merge branch 'main' into init-renderer-model
DarkLight1337 Dec 15, 2025
83af1ed
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 4, 2026
59b8e09
Fix
DarkLight1337 Jan 4, 2026
e34751f
Fix
DarkLight1337 Jan 4, 2026
d24fe7b
Fix
DarkLight1337 Jan 4, 2026
eae64ca
Fix
DarkLight1337 Jan 4, 2026
fe4aae4
Fix
DarkLight1337 Jan 4, 2026
79de706
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 5, 2026
ce521f9
Use new name
DarkLight1337 Jan 6, 2026
bfeada1
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 6, 2026
3c3c2ab
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 9, 2026
09aae0c
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 9, 2026
dbd9bbb
Address comment
DarkLight1337 Jan 9, 2026
4899b9e
Handle grok2
DarkLight1337 Jan 9, 2026
d431a11
Address comment
DarkLight1337 Jan 9, 2026
6e0b291
Remove redundant statements
DarkLight1337 Jan 9, 2026
3daaf22
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 10, 2026
e62d731
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 12, 2026
f41d339
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 13, 2026
c282265
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 14, 2026
c9135a5
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 14, 2026
1c32fd9
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 15, 2026
b77888b
Address comment
DarkLight1337 Jan 15, 2026
4d389c8
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 15, 2026
c71f231
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 18, 2026
22a59f4
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 19, 2026
c27a8b9
Fix
DarkLight1337 Jan 19, 2026
8dc62d9
More fixes
DarkLight1337 Jan 19, 2026
4d6010b
Fix
DarkLight1337 Jan 19, 2026
08b23b2
Merge branch 'main' into init-renderer-model
DarkLight1337 Jan 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion benchmarks/backend_request_func.py
Original file line number Diff line number Diff line change
Expand Up @@ -620,7 +620,7 @@ def get_tokenizer(
kwargs["use_fast"] = False
if tokenizer_mode == "mistral":
try:
from vllm.tokenizers import MistralTokenizer
from vllm.tokenizers.mistral import MistralTokenizer
except ImportError as e:
raise ImportError(
"MistralTokenizer requires vllm package.\n"
Expand Down
18 changes: 11 additions & 7 deletions tests/entrypoints/openai/test_chat_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
import pytest

from vllm.config import ModelConfig
from vllm.entrypoints.chat_utils import apply_hf_chat_template, load_chat_template
from vllm.entrypoints.chat_utils import load_chat_template
from vllm.entrypoints.openai.protocol import ChatCompletionRequest
from vllm.renderers.hf import safe_apply_chat_template
from vllm.tokenizers import get_tokenizer
from vllm.tokenizers.hf import CachedHfTokenizer

from ...models.registry import HF_EXAMPLE_MODELS
from ...utils import VLLM_PATH
Expand Down Expand Up @@ -123,7 +125,8 @@ def test_get_gen_prompt(

# Initialize the tokenizer
tokenizer = get_tokenizer(
tokenizer_name=model_config.tokenizer,
model_config.tokenizer,
tokenizer_cls=CachedHfTokenizer,
trust_remote_code=model_config.trust_remote_code,
)
template_content = load_chat_template(chat_template=template)
Expand All @@ -139,14 +142,15 @@ def test_get_gen_prompt(
)

# Call the function and get the result
result = apply_hf_chat_template(
tokenizer=tokenizer,
conversation=mock_request.messages,
chat_template=mock_request.chat_template or template_content,
model_config=model_config,
result = safe_apply_chat_template(
model_config,
tokenizer,
mock_request.messages,
tools=None,
chat_template=mock_request.chat_template or template_content,
add_generation_prompt=mock_request.add_generation_prompt,
continue_final_message=mock_request.continue_final_message,
tokenize=False,
)

# Test assertion
Expand Down
2 changes: 1 addition & 1 deletion tests/entrypoints/openai/test_serving_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from vllm.config import ModelConfig
from vllm.entrypoints.openai.serving_engine import OpenAIServing
from vllm.entrypoints.openai.serving_models import OpenAIServingModels
from vllm.tokenizers import MistralTokenizer
from vllm.tokenizers.mistral import MistralTokenizer


@pytest.fixture()
Expand Down
3 changes: 2 additions & 1 deletion tests/entrypoints/test_chat_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
encode_image_base64,
encode_video_base64,
)
from vllm.tokenizers import MistralTokenizer, get_tokenizer
from vllm.tokenizers import get_tokenizer
from vllm.tokenizers.mistral import MistralTokenizer
from vllm.utils.serial_utils import tensor2base64

from ..models.registry import HF_EXAMPLE_MODELS
Expand Down
2 changes: 1 addition & 1 deletion tests/models/language/generation/test_mistral.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
MistralToolParser,
)
from vllm.sampling_params import SamplingParams
from vllm.tokenizers import MistralTokenizer
from vllm.tokenizers.mistral import MistralTokenizer

from ...utils import check_logprobs_close

Expand Down
2 changes: 1 addition & 1 deletion tests/models/multimodal/generation/test_voxtral.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from mistral_common.protocol.instruct.chunk import AudioChunk, RawAudio, TextChunk
from mistral_common.protocol.instruct.messages import UserMessage

from vllm.tokenizers import MistralTokenizer
from vllm.tokenizers.mistral import MistralTokenizer

from ....conftest import AudioTestAssets
from ....utils import RemoteOpenAIServer
Expand Down
7 changes: 2 additions & 5 deletions tests/models/multimodal/processing/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,8 @@
from vllm.multimodal.cache import MultiModalProcessorOnlyCache
from vllm.multimodal.inputs import MultiModalInputs, batched_tensors_equal
from vllm.multimodal.processing import BaseMultiModalProcessor, InputProcessingContext
from vllm.tokenizers import (
MistralTokenizer,
TokenizerLike,
cached_tokenizer_from_config,
)
from vllm.tokenizers import TokenizerLike, cached_tokenizer_from_config
from vllm.tokenizers.mistral import MistralTokenizer

from ....multimodal.utils import random_audio, random_image, random_video
from ...registry import (
Expand Down
2 changes: 1 addition & 1 deletion tests/reasoning/test_mistral_reasoning_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from tests.reasoning.utils import run_reasoning_extraction_mistral
from vllm.reasoning import ReasoningParser, ReasoningParserManager
from vllm.tokenizers import MistralTokenizer
from vllm.tokenizers.mistral import MistralTokenizer

parser_name = "mistral"

Expand Down
2 changes: 1 addition & 1 deletion tests/reasoning/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from vllm.entrypoints.openai.protocol import ChatCompletionRequest, DeltaMessage
from vllm.reasoning import ReasoningParser
from vllm.tokenizers import MistralTokenizer
from vllm.tokenizers.mistral import MistralTokenizer


class StreamingReasoningReconstructor:
Expand Down
5 changes: 2 additions & 3 deletions tests/test_inputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from vllm.inputs import zip_enc_dec_prompts
from vllm.inputs.parse import parse_raw_prompts
from vllm.inputs.preprocess import InputPreprocessor
from vllm.tokenizers import init_tokenizer_from_config

pytestmark = pytest.mark.cpu_test

Expand Down Expand Up @@ -108,10 +107,10 @@ def test_zip_enc_dec_prompts(mm_processor_kwargs, expected_mm_kwargs):
)
def test_preprocessor_always_mm_code_path(model_id, prompt):
model_config = ModelConfig(model=model_id)
tokenizer = init_tokenizer_from_config(model_config)
input_preprocessor = InputPreprocessor(model_config, tokenizer)
input_preprocessor = InputPreprocessor(model_config)

# HF processor adds sep token
tokenizer = input_preprocessor.get_tokenizer()
sep_token_id = tokenizer.vocab[tokenizer.sep_token]

processed_inputs = input_preprocessor.preprocess(prompt)
Expand Down
2 changes: 1 addition & 1 deletion tests/tokenizers_/test_detokenize.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from transformers import AutoTokenizer, PreTrainedTokenizer, PreTrainedTokenizerFast

from vllm.sampling_params import SamplingParams
from vllm.tokenizers import MistralTokenizer
from vllm.tokenizers.mistral import MistralTokenizer
from vllm.v1.engine import EngineCoreRequest
from vllm.v1.engine.detokenizer import (
FastIncrementalDetokenizer,
Expand Down
34 changes: 32 additions & 2 deletions tests/tokenizers_/test_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
from pathlib import Path

from vllm.tokenizers import TokenizerLike, TokenizerRegistry, get_tokenizer
import pytest

from vllm.tokenizers import TokenizerLike
from vllm.tokenizers.registry import (
TokenizerRegistry,
get_tokenizer,
resolve_tokenizer_args,
)


class TestTokenizer(TokenizerLike):
Expand Down Expand Up @@ -40,10 +47,33 @@ def is_fast(self) -> bool:
return True


@pytest.mark.parametrize("runner_type", ["generate", "pooling"])
def test_resolve_tokenizer_args_idempotent(runner_type):
tokenizer_name = "facebook/opt-125m"

tokenizer_mode, tokenizer_name, tokenizer_args, tokenizer_kwargs = (
resolve_tokenizer_args(
tokenizer_name,
runner_type=runner_type,
)
)

assert (
tokenizer_mode,
tokenizer_name,
tokenizer_args,
tokenizer_kwargs,
) == resolve_tokenizer_args(
tokenizer_name,
*tokenizer_args,
**tokenizer_kwargs,
)


def test_customized_tokenizer():
TokenizerRegistry.register("test_tokenizer", __name__, TestTokenizer.__name__)

tokenizer = TokenizerRegistry.get_tokenizer("test_tokenizer", "abc")
tokenizer = TokenizerRegistry.load_tokenizer("test_tokenizer", "abc")
assert isinstance(tokenizer, TestTokenizer)
assert tokenizer.path_or_repo_id == "abc"
assert tokenizer.bos_token_id == 0
Expand Down
7 changes: 2 additions & 5 deletions tests/tool_use/test_mistral_tool_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,9 @@

from vllm.entrypoints.openai.protocol import DeltaMessage, DeltaToolCall
from vllm.entrypoints.openai.tool_parsers.mistral_tool_parser import MistralToolParser
from vllm.tokenizers import (
MistralTokenizer,
TokenizerLike,
get_tokenizer,
)
from vllm.tokenizers import TokenizerLike, get_tokenizer
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
from vllm.tokenizers.mistral import MistralTokenizer


@pytest.fixture(scope="module")
Expand Down
21 changes: 11 additions & 10 deletions tests/v1/engine/test_process_multi_modal_uuids.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@

from vllm.assets.image import ImageAsset
from vllm.assets.video import VideoAsset
from vllm.config import CacheConfig, DeviceConfig, ModelConfig, VllmConfig
from vllm.config import (
CacheConfig,
DeviceConfig,
ModelConfig,
MultiModalConfig,
VllmConfig,
)
from vllm.sampling_params import SamplingParams
from vllm.v1.engine import input_processor as input_processor_mod
from vllm.v1.engine.input_processor import InputProcessor
Expand Down Expand Up @@ -44,27 +50,22 @@ def _mock_input_processor(
monkeypatch.setattr(VllmConfig, "__post_init__", lambda self: None, raising=True)

model_config = ModelConfig(
tokenizer="dummy",
skip_tokenizer_init=True,
max_model_len=128,
mm_processor_cache_gb=mm_cache_gb,
generation_config="vllm",
tokenizer="dummy",
)
model_config.runner_type = "generate"
model_config.multimodal_config = MultiModalConfig(mm_processor_cache_gb=mm_cache_gb)

# Minimal multimodal_config to satisfy references in
# Processor.process_inputs.
class _MockMMConfig:
def __init__(self, gb: float):
self.mm_processor_cache_gb = gb

model_config.multimodal_config = _MockMMConfig(mm_cache_gb) # type: ignore[attr-defined]
vllm_config = VllmConfig(
model_config=model_config,
cache_config=CacheConfig(enable_prefix_caching=enable_prefix_caching),
device_config=DeviceConfig(device="cpu"),
)

return InputProcessor(vllm_config, tokenizer=None)
return InputProcessor(vllm_config)


def test_multi_modal_uuids_length_mismatch_raises(monkeypatch):
Expand Down
1 change: 1 addition & 0 deletions tools/pre_commit/mypy.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"vllm/multimodal",
"vllm/platforms",
"vllm/plugins",
"vllm/renderers",
"vllm/tokenizers",
"vllm/transformers_utils",
"vllm/triton_utils",
Expand Down
11 changes: 5 additions & 6 deletions vllm/engine/protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
from vllm.outputs import PoolingRequestOutput, RequestOutput
from vllm.plugins.io_processors import IOProcessor
from vllm.pooling_params import PoolingParams
from vllm.renderers import RendererLike
from vllm.sampling_params import SamplingParams
from vllm.tasks import SupportedTask
from vllm.tokenizers import TokenizerLike
from vllm.v1.engine import EngineCoreRequest
from vllm.v1.engine.input_processor import InputProcessor

Expand All @@ -26,6 +26,10 @@ class EngineClient(ABC):
input_processor: InputProcessor
io_processor: IOProcessor | None

@property
@abstractmethod
def renderer(self) -> RendererLike: ...

@property
@abstractmethod
def is_running(self) -> bool: ...
Expand Down Expand Up @@ -84,11 +88,6 @@ async def abort(self, request_id: str | Iterable[str]) -> None:
"""
...

@abstractmethod
async def get_tokenizer(self) -> TokenizerLike:
"""Get the tokenizer"""
...

@abstractmethod
async def is_tracing_enabled(self) -> bool: ...

Expand Down
Loading