This commit is contained in:
@@ -17,7 +17,6 @@ from vllm.config import (
|
||||
DeviceConfig,
|
||||
ModelConfig,
|
||||
PassConfig,
|
||||
RendererConfig,
|
||||
VllmConfig,
|
||||
get_current_vllm_config,
|
||||
set_current_vllm_config,
|
||||
@@ -277,7 +276,6 @@ def sequence_parallelism_pass_on_test_model(
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
device_config=device_config,
|
||||
compilation_config=compilation_config,
|
||||
)
|
||||
|
||||
@@ -15,7 +15,6 @@ from vllm.config import (
|
||||
CompilationConfig,
|
||||
ModelConfig,
|
||||
PassConfig,
|
||||
RendererConfig,
|
||||
VllmConfig,
|
||||
set_current_vllm_config,
|
||||
)
|
||||
@@ -220,11 +219,8 @@ def test_fix_functionalization(
|
||||
torch.set_default_device("cuda")
|
||||
torch.set_default_dtype(dtype)
|
||||
|
||||
model_config = ModelConfig(dtype=dtype)
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
model_config=ModelConfig(dtype=dtype),
|
||||
compilation_config=CompilationConfig(
|
||||
custom_ops=["all"],
|
||||
pass_config=PassConfig(
|
||||
|
||||
@@ -15,7 +15,6 @@ from vllm.config import (
|
||||
CompilationMode,
|
||||
ModelConfig,
|
||||
PassConfig,
|
||||
RendererConfig,
|
||||
VllmConfig,
|
||||
)
|
||||
from vllm.model_executor.layers.layernorm import RMSNorm
|
||||
@@ -155,11 +154,8 @@ def test_fusion_rmsnorm_quant(
|
||||
custom_ops.append("+rms_norm")
|
||||
if enable_quant_fp8_custom_op:
|
||||
custom_ops.append("+quant_fp8")
|
||||
|
||||
model_config = ModelConfig(dtype=dtype)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
model_config=ModelConfig(dtype=dtype),
|
||||
compilation_config=CompilationConfig(
|
||||
mode=CompilationMode.VLLM_COMPILE,
|
||||
custom_ops=custom_ops,
|
||||
|
||||
@@ -24,7 +24,6 @@ from vllm.config import (
|
||||
CompilationMode,
|
||||
ModelConfig,
|
||||
PassConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
set_current_vllm_config,
|
||||
@@ -326,7 +325,6 @@ def test_attention_quant_pattern(
|
||||
)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
scheduler_config=SchedulerConfig(
|
||||
max_num_seqs=1024,
|
||||
max_model_len=model_config.max_model_len,
|
||||
|
||||
@@ -7,7 +7,7 @@ import torch
|
||||
|
||||
from vllm.compilation.inductor_pass import CallableInductorPass, InductorPass
|
||||
from vllm.compilation.pass_manager import PostGradPassManager
|
||||
from vllm.config import ModelConfig, RendererConfig, VllmConfig
|
||||
from vllm.config import ModelConfig, VllmConfig
|
||||
|
||||
|
||||
# dummy custom pass that doesn't inherit
|
||||
@@ -43,11 +43,7 @@ class ProperPass(InductorPass):
|
||||
)
|
||||
def test_pass_manager_uuid(callable):
|
||||
# Some passes need dtype to be set
|
||||
model_config = ModelConfig(dtype=torch.bfloat16)
|
||||
config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
)
|
||||
config = VllmConfig(model_config=ModelConfig(dtype=torch.bfloat16))
|
||||
|
||||
pass_manager = PostGradPassManager()
|
||||
pass_manager.configure(config)
|
||||
|
||||
@@ -19,7 +19,6 @@ from vllm.config import (
|
||||
CompilationMode,
|
||||
ModelConfig,
|
||||
PassConfig,
|
||||
RendererConfig,
|
||||
VllmConfig,
|
||||
set_current_vllm_config,
|
||||
)
|
||||
@@ -134,10 +133,8 @@ def test_qk_norm_rope_fusion(
|
||||
if enable_rope_custom_op:
|
||||
custom_ops.append("+rotary_embedding")
|
||||
|
||||
model_config = ModelConfig(dtype=dtype)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
model_config=ModelConfig(dtype=dtype),
|
||||
compilation_config=CompilationConfig(
|
||||
mode=CompilationMode.VLLM_COMPILE,
|
||||
custom_ops=custom_ops,
|
||||
|
||||
@@ -5,7 +5,6 @@ from vllm.config import (
|
||||
DeviceConfig,
|
||||
KVTransferConfig,
|
||||
ModelConfig,
|
||||
RendererConfig,
|
||||
VllmConfig,
|
||||
set_current_vllm_config,
|
||||
)
|
||||
@@ -48,7 +47,6 @@ def test_get_kv_connector_cache_layout_with_nixl_connector():
|
||||
vllm_config = VllmConfig(
|
||||
device_config=DeviceConfig("cpu"),
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
kv_transfer_config=kv_transfer_config,
|
||||
)
|
||||
with set_current_vllm_config(vllm_config):
|
||||
@@ -72,7 +70,6 @@ def test_get_kv_connector_cache_layout_with_multi_connector():
|
||||
vllm_config = VllmConfig(
|
||||
device_config=DeviceConfig("cpu"),
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
kv_transfer_config=kv_transfer_config,
|
||||
)
|
||||
with set_current_vllm_config(vllm_config):
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
import pytest
|
||||
|
||||
from vllm.config import ModelConfig
|
||||
from vllm.entrypoints.chat_utils import apply_hf_chat_template, load_chat_template
|
||||
from vllm.entrypoints.openai.protocol import ChatCompletionRequest
|
||||
from vllm.tokenizers import get_tokenizer
|
||||
@@ -106,11 +107,24 @@ def test_get_gen_prompt(
|
||||
model_info = HF_EXAMPLE_MODELS.find_hf_info(model)
|
||||
model_info.check_available_online(on_fail="skip")
|
||||
|
||||
renderer_config = model_info.build_renderer_config(model)
|
||||
model_config = ModelConfig(
|
||||
model,
|
||||
tokenizer=model_info.tokenizer or model,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
revision=model_info.revision,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=model_info.dtype,
|
||||
)
|
||||
|
||||
# Initialize the tokenizer
|
||||
tokenizer = get_tokenizer(
|
||||
renderer_config.tokenizer,
|
||||
trust_remote_code=renderer_config.trust_remote_code,
|
||||
tokenizer_name=model_config.tokenizer,
|
||||
trust_remote_code=model_config.trust_remote_code,
|
||||
)
|
||||
template_content = load_chat_template(chat_template=template)
|
||||
|
||||
@@ -129,7 +143,7 @@ def test_get_gen_prompt(
|
||||
tokenizer=tokenizer,
|
||||
conversation=mock_request.messages,
|
||||
chat_template=mock_request.chat_template or template_content,
|
||||
renderer_config=renderer_config,
|
||||
model_config=model_config,
|
||||
tools=None,
|
||||
add_generation_prompt=mock_request.add_generation_prompt,
|
||||
continue_final_message=mock_request.continue_final_message,
|
||||
|
||||
@@ -33,34 +33,26 @@ class MockModelConfig:
|
||||
"""Minimal mock ModelConfig for testing."""
|
||||
|
||||
model: str = MODEL_NAME
|
||||
tokenizer: str = MODEL_NAME
|
||||
trust_remote_code: bool = False
|
||||
tokenizer_mode: str = "auto"
|
||||
max_model_len: int = 100
|
||||
tokenizer_revision: str | None = None
|
||||
multimodal_config: MultiModalConfig = field(default_factory=MultiModalConfig)
|
||||
hf_config: MockHFConfig = field(default_factory=MockHFConfig)
|
||||
logits_processors: list[str] | None = None
|
||||
logits_processor_pattern: str | None = None
|
||||
diff_sampling_param: dict | None = None
|
||||
allowed_local_media_path: str = ""
|
||||
allowed_media_domains: list[str] | None = None
|
||||
encoder_config = None
|
||||
generation_config: str = "auto"
|
||||
skip_tokenizer_init: bool = False
|
||||
|
||||
def get_diff_sampling_param(self):
|
||||
return self.diff_sampling_param or {}
|
||||
|
||||
|
||||
@dataclass
|
||||
class MockRendererConfig:
|
||||
"""Minimal mock RendererConfig for testing."""
|
||||
|
||||
model_config: MockModelConfig
|
||||
|
||||
tokenizer: str = MODEL_NAME
|
||||
tokenizer_mode: str = "auto"
|
||||
tokenizer_revision: str | None = None
|
||||
skip_tokenizer_init: bool = False
|
||||
allowed_local_media_path: str = ""
|
||||
allowed_media_domains: list[str] | None = None
|
||||
|
||||
|
||||
class MockLoRAResolver(LoRAResolver):
|
||||
async def resolve_lora(
|
||||
self, base_model_name: str, lora_name: str
|
||||
@@ -122,7 +114,6 @@ def mock_serving_setup():
|
||||
mock_engine.add_lora.reset_mock()
|
||||
|
||||
mock_engine.model_config = MockModelConfig()
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_engine.model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
|
||||
@@ -346,33 +346,27 @@ class MockHFConfig:
|
||||
class MockModelConfig:
|
||||
task = "generate"
|
||||
runner_type = "generate"
|
||||
tokenizer = MODEL_NAME
|
||||
trust_remote_code = False
|
||||
tokenizer_mode = "auto"
|
||||
max_model_len = 100
|
||||
tokenizer_revision = None
|
||||
multimodal_config = MultiModalConfig()
|
||||
hf_config = MockHFConfig()
|
||||
logits_processors: list[str] | None = None
|
||||
logits_processor_pattern = None
|
||||
diff_sampling_param: dict | None = None
|
||||
allowed_local_media_path: str = ""
|
||||
allowed_media_domains: list[str] | None = None
|
||||
encoder_config = None
|
||||
generation_config: str = "auto"
|
||||
media_io_kwargs: dict[str, dict[str, Any]] = field(default_factory=dict)
|
||||
skip_tokenizer_init = False
|
||||
|
||||
def get_diff_sampling_param(self):
|
||||
return self.diff_sampling_param or {}
|
||||
|
||||
|
||||
@dataclass
|
||||
class MockRendererConfig:
|
||||
model_config: MockModelConfig = field(default_factory=MockModelConfig)
|
||||
|
||||
tokenizer = MODEL_NAME
|
||||
tokenizer_mode = "auto"
|
||||
tokenizer_revision = None
|
||||
skip_tokenizer_init = False
|
||||
media_io_kwargs: dict[str, dict[str, Any]] = field(default_factory=dict)
|
||||
allowed_local_media_path: str = ""
|
||||
allowed_media_domains: list[str] | None = None
|
||||
|
||||
|
||||
def _build_serving_chat(engine: AsyncLLM) -> OpenAIServingChat:
|
||||
models = OpenAIServingModels(
|
||||
engine_client=engine,
|
||||
@@ -405,7 +399,6 @@ def _build_serving_chat(engine: AsyncLLM) -> OpenAIServingChat:
|
||||
@dataclass
|
||||
class MockEngine:
|
||||
model_config: MockModelConfig = field(default_factory=MockModelConfig)
|
||||
renderer_config: MockRendererConfig = field(default_factory=MockRendererConfig)
|
||||
input_processor: MagicMock = field(default_factory=MagicMock)
|
||||
io_processor: MagicMock = field(default_factory=MagicMock)
|
||||
|
||||
@@ -436,7 +429,6 @@ async def test_serving_chat_returns_correct_model_name():
|
||||
mock_engine.get_tokenizer.return_value = get_tokenizer(MODEL_NAME)
|
||||
mock_engine.errored = False
|
||||
mock_engine.model_config = MockModelConfig()
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_engine.model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
@@ -467,7 +459,6 @@ async def test_serving_chat_should_set_correct_max_tokens():
|
||||
mock_engine.get_tokenizer.return_value = get_tokenizer(MODEL_NAME)
|
||||
mock_engine.errored = False
|
||||
mock_engine.model_config = MockModelConfig()
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_engine.model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
@@ -501,7 +492,6 @@ async def test_serving_chat_should_set_correct_max_tokens():
|
||||
mock_engine.get_tokenizer.return_value = get_tokenizer(MODEL_NAME)
|
||||
mock_engine.errored = False
|
||||
mock_engine.model_config = mock_model_config
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
@@ -547,7 +537,6 @@ async def test_serving_chat_should_set_correct_max_tokens():
|
||||
mock_engine.get_tokenizer.return_value = get_tokenizer(MODEL_NAME)
|
||||
mock_engine.errored = False
|
||||
mock_engine.model_config = mock_model_config
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
@@ -594,7 +583,6 @@ async def test_serving_chat_could_load_correct_generation_config():
|
||||
mock_engine.get_tokenizer.return_value = get_tokenizer(MODEL_NAME)
|
||||
mock_engine.errored = False
|
||||
mock_engine.model_config = mock_model_config
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
@@ -641,7 +629,6 @@ async def test_serving_chat_did_set_correct_cache_salt(model_type):
|
||||
mock_engine.get_tokenizer.return_value = get_tokenizer(MODEL_NAME)
|
||||
mock_engine.errored = False
|
||||
mock_engine.model_config = mock_model_config
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
@@ -675,7 +662,6 @@ async def test_serving_chat_data_parallel_rank_extraction():
|
||||
mock_engine.get_tokenizer.return_value = get_tokenizer(MODEL_NAME)
|
||||
mock_engine.errored = False
|
||||
mock_engine.model_config = MockModelConfig()
|
||||
mock_engine.renderer_config = MockRendererConfig(mock_engine.model_config)
|
||||
mock_engine.input_processor = MagicMock()
|
||||
mock_engine.io_processor = MagicMock()
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from unittest.mock import Mock
|
||||
|
||||
import pytest
|
||||
|
||||
from vllm.config import ModelConfig, RendererConfig
|
||||
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
|
||||
@@ -19,16 +19,10 @@ def serving() -> OpenAIServing:
|
||||
|
||||
# Create minimal mocks
|
||||
engine_client = Mock()
|
||||
|
||||
model_config = Mock(spec=ModelConfig)
|
||||
model_config.max_model_len = 32768
|
||||
|
||||
renderer_config = Mock(spec=RendererConfig)
|
||||
renderer_config.model_config = model_config
|
||||
|
||||
models = Mock(spec=OpenAIServingModels)
|
||||
models.model_config = model_config
|
||||
models.renderer_config = renderer_config
|
||||
models.input_processor = Mock()
|
||||
models.io_processor = Mock()
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from vllm.config import ModelConfig, RendererConfig
|
||||
from vllm.config import ModelConfig
|
||||
from vllm.engine.protocol import EngineClient
|
||||
from vllm.entrypoints.openai.protocol import (
|
||||
ErrorResponse,
|
||||
@@ -27,15 +27,9 @@ LORA_UNLOADING_SUCCESS_MESSAGE = (
|
||||
async def _async_serving_models_init() -> OpenAIServingModels:
|
||||
mock_engine_client = MagicMock(spec=EngineClient)
|
||||
# Set the max_model_len attribute to avoid missing attribute
|
||||
|
||||
mock_model_config = MagicMock(spec=ModelConfig)
|
||||
mock_model_config.max_model_len = 2048
|
||||
|
||||
mock_renderer_config = MagicMock(spec=RendererConfig)
|
||||
mock_renderer_config.model_config = mock_model_config
|
||||
|
||||
mock_engine_client.model_config = mock_model_config
|
||||
mock_engine_client.renderer_config = mock_renderer_config
|
||||
mock_engine_client.input_processor = MagicMock()
|
||||
mock_engine_client.io_processor = MagicMock()
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ from mistral_common.tokens.tokenizers.base import SpecialTokenPolicy
|
||||
from vllm.assets.audio import AudioAsset
|
||||
from vllm.assets.image import ImageAsset
|
||||
from vllm.assets.video import VideoAsset
|
||||
from vllm.config import ModelConfig, RendererConfig
|
||||
from vllm.config import ModelConfig
|
||||
from vllm.entrypoints.chat_utils import (
|
||||
_try_extract_ast,
|
||||
apply_mistral_chat_template,
|
||||
@@ -233,7 +233,7 @@ def test_parse_chat_messages_single_image(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -265,7 +265,7 @@ def test_parse_chat_messages_single_image_with_uuid(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -295,7 +295,7 @@ def test_parse_chat_messages_single_empty_image_with_uuid(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -328,7 +328,7 @@ def test_parse_chat_messages_single_image_with_bad_uuid_format(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -369,7 +369,7 @@ def test_parse_chat_messages_multiple_images_with_uuids(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -409,7 +409,7 @@ def test_parse_chat_messages_multiple_empty_images_with_uuids(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -451,7 +451,7 @@ def test_parse_chat_messages_mixed_empty_images_with_uuids(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -485,7 +485,7 @@ async def test_parse_chat_messages_single_image_with_uuid_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -516,7 +516,7 @@ async def test_parse_chat_messages_empty_image_with_uuid_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -554,7 +554,7 @@ async def test_parse_chat_messages_multiple_images_with_uuids_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -595,7 +595,7 @@ async def test_parse_chat_messages_multiple_empty_images_with_uuids_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -634,7 +634,7 @@ async def test_parse_chat_messages_multiple_images_with_partial_uuids_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -660,7 +660,7 @@ def test_parse_chat_messages_empty_system(
|
||||
"content": [{"type": "text", "text": "Who are you?"}],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=mistral_model_config),
|
||||
mistral_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
assert conversation == [
|
||||
@@ -677,7 +677,7 @@ def test_parse_chat_messages_empty_system(
|
||||
"content": [{"type": "text", "text": "Who are you?"}],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=mistral_model_config),
|
||||
mistral_model_config,
|
||||
content_format="openai",
|
||||
)
|
||||
assert conversation == [
|
||||
@@ -701,7 +701,7 @@ async def test_parse_chat_messages_single_image_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -730,7 +730,7 @@ def test_parse_chat_messages_multiple_images(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -758,7 +758,7 @@ def test_parse_chat_messages_empty_pil_image_with_uuid(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -786,7 +786,7 @@ def test_parse_chat_messages_empty_image_embeds_with_uuid(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_image_embeds),
|
||||
phi3v_model_config_image_embeds,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -818,7 +818,7 @@ def test_parse_chat_messages_empty_audio_embeds_with_uuid(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=audio_embeds_model_config),
|
||||
audio_embeds_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -858,7 +858,7 @@ def test_parse_chat_messages_audio_embeds_with_string(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=audio_embeds_model_config),
|
||||
audio_embeds_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -900,7 +900,7 @@ async def test_parse_chat_messages_audio_embeds_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=audio_embeds_model_config),
|
||||
audio_embeds_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1108,7 +1108,7 @@ async def test_parse_chat_messages_empty_image_embeds_with_uuid_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_image_embeds),
|
||||
phi3v_model_config_image_embeds,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1144,7 +1144,7 @@ async def test_parse_chat_messages_multiple_images_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1176,7 +1176,7 @@ def test_parse_chat_messages_placeholder_already_in_prompt(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
assert conversation == [
|
||||
@@ -1208,7 +1208,7 @@ def test_parse_chat_messages_placeholder_one_already_in_prompt(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1245,7 +1245,7 @@ def test_parse_chat_messages_multiple_images_across_messages(
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1289,7 +1289,7 @@ def test_parse_chat_messages_multiple_images_with_uuids_across_messages(
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1314,7 +1314,7 @@ def test_parse_chat_messages_context_text_format(
|
||||
{"role": "assistant", "content": "Some stuff."},
|
||||
{"role": "user", "content": "What about this one?"},
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="openai",
|
||||
)
|
||||
|
||||
@@ -1367,7 +1367,7 @@ def test_parse_chat_messages_rejects_too_many_images_in_one_message(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1410,7 +1410,7 @@ def test_parse_chat_messages_rejects_too_many_images_across_messages(
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1430,7 +1430,7 @@ def test_parse_chat_messages_multiple_images_uncommon_input(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config),
|
||||
phi3v_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1464,7 +1464,7 @@ def test_parse_chat_messages_multiple_images_interleave(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_mm_interleaved),
|
||||
phi3v_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1500,7 +1500,7 @@ async def test_parse_chat_messages_multiple_images_interleave_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_mm_interleaved),
|
||||
phi3v_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1545,7 +1545,7 @@ async def test_parse_chat_messages_multiple_images_with_uuids_interleave_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_mm_interleaved),
|
||||
phi3v_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1583,7 +1583,7 @@ def test_parse_chat_messages_multiple_images_multiple_messages_interleave(
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_mm_interleaved),
|
||||
phi3v_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1631,7 +1631,7 @@ def test_parse_chat_messages_multiple_images_with_uuids_multiple_messages_interl
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_mm_interleaved),
|
||||
phi3v_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1675,7 +1675,7 @@ def test_parse_chat_messages_multiple_modals_multiple_messages_interleave(
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=qwen25omni_model_config_mm_interleaved),
|
||||
qwen25omni_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1743,7 +1743,7 @@ def test_parse_chat_messages_multiple_modals_with_uuids_multiple_messages_interl
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=qwen25omni_model_config_mm_interleaved),
|
||||
qwen25omni_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1813,7 +1813,7 @@ def test_parse_chat_messages_multiple_modals_with_uuids_multiple_empty_media_mes
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=qwen25omni_model_config_mm_interleaved),
|
||||
qwen25omni_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1879,7 +1879,7 @@ def test_parse_chat_messages_multiple_modals_with_partial_uuids_multiple_message
|
||||
],
|
||||
},
|
||||
],
|
||||
RendererConfig(model_config=qwen25omni_model_config_mm_interleaved),
|
||||
qwen25omni_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1927,7 +1927,7 @@ def test_parse_chat_messages_multiple_images_interleave_with_placeholders(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=phi3v_model_config_mm_interleaved),
|
||||
phi3v_model_config_mm_interleaved,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -1945,11 +1945,24 @@ def test_resolve_hf_chat_template(sample_json_schema, model, use_tools):
|
||||
model_info = HF_EXAMPLE_MODELS.find_hf_info(model)
|
||||
model_info.check_available_online(on_fail="skip")
|
||||
|
||||
renderer_config = model_info.build_renderer_config(model)
|
||||
model_config = ModelConfig(
|
||||
model,
|
||||
tokenizer=model_info.tokenizer or model,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=model_info.dtype,
|
||||
)
|
||||
|
||||
# Build the tokenizer
|
||||
tokenizer = get_tokenizer(
|
||||
renderer_config.tokenizer,
|
||||
trust_remote_code=renderer_config.trust_remote_code,
|
||||
model,
|
||||
trust_remote_code=model_config.trust_remote_code,
|
||||
)
|
||||
|
||||
tools = (
|
||||
@@ -1972,7 +1985,7 @@ def test_resolve_hf_chat_template(sample_json_schema, model, use_tools):
|
||||
tokenizer,
|
||||
chat_template=None,
|
||||
tools=tools,
|
||||
model_config=renderer_config.model_config,
|
||||
model_config=model_config,
|
||||
)
|
||||
assert isinstance(chat_template, str)
|
||||
|
||||
@@ -2034,11 +2047,24 @@ def test_resolve_hf_chat_template_kwargs(sample_json_schema, model, expected_kwa
|
||||
"enable_thinking": True,
|
||||
}
|
||||
|
||||
renderer_config = model_info.build_renderer_config(model)
|
||||
model_config = ModelConfig(
|
||||
model,
|
||||
tokenizer=model_info.tokenizer or model,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=model_info.dtype,
|
||||
)
|
||||
|
||||
# Build the tokenizer
|
||||
tokenizer = get_tokenizer(
|
||||
renderer_config.tokenizer,
|
||||
trust_remote_code=renderer_config.trust_remote_code,
|
||||
model,
|
||||
trust_remote_code=model_config.trust_remote_code,
|
||||
)
|
||||
|
||||
# Test detecting the tokenizer's chat_template
|
||||
@@ -2046,7 +2072,7 @@ def test_resolve_hf_chat_template_kwargs(sample_json_schema, model, expected_kwa
|
||||
tokenizer,
|
||||
chat_template=None,
|
||||
tools=tools,
|
||||
model_config=renderer_config.model_config,
|
||||
model_config=model_config,
|
||||
)
|
||||
with pytest.raises(
|
||||
ValueError, match="Found unexpected chat template kwargs from request"
|
||||
@@ -2117,11 +2143,23 @@ def test_resolve_content_format_hf_defined(model, expected_format):
|
||||
model_info = HF_EXAMPLE_MODELS.find_hf_info(model)
|
||||
model_info.check_available_online(on_fail="skip")
|
||||
|
||||
renderer_config = model_info.build_renderer_config(model)
|
||||
model_config = ModelConfig(
|
||||
model,
|
||||
tokenizer=model_info.tokenizer or model,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=model_info.dtype,
|
||||
)
|
||||
|
||||
tokenizer = get_tokenizer(
|
||||
renderer_config.tokenizer,
|
||||
trust_remote_code=renderer_config.trust_remote_code,
|
||||
model,
|
||||
trust_remote_code=model_config.trust_remote_code,
|
||||
)
|
||||
|
||||
# Test detecting the tokenizer's chat_template
|
||||
@@ -2129,7 +2167,7 @@ def test_resolve_content_format_hf_defined(model, expected_format):
|
||||
tokenizer,
|
||||
chat_template=None,
|
||||
tools=None,
|
||||
model_config=renderer_config.model_config,
|
||||
model_config=model_config,
|
||||
)
|
||||
assert isinstance(chat_template, str)
|
||||
|
||||
@@ -2143,7 +2181,7 @@ def test_resolve_content_format_hf_defined(model, expected_format):
|
||||
None,
|
||||
"auto",
|
||||
tokenizer,
|
||||
renderer_config=renderer_config,
|
||||
model_config=model_config,
|
||||
)
|
||||
|
||||
assert resolved_format == expected_format
|
||||
@@ -2165,11 +2203,23 @@ def test_resolve_content_format_fallbacks(model, expected_format):
|
||||
model_info = HF_EXAMPLE_MODELS.find_hf_info(model)
|
||||
model_info.check_available_online(on_fail="skip")
|
||||
|
||||
renderer_config = model_info.build_renderer_config(model)
|
||||
model_config = ModelConfig(
|
||||
model,
|
||||
tokenizer=model_info.tokenizer or model,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=model_info.dtype,
|
||||
)
|
||||
|
||||
tokenizer = get_tokenizer(
|
||||
renderer_config.tokenizer,
|
||||
trust_remote_code=renderer_config.trust_remote_code,
|
||||
model_config.tokenizer,
|
||||
trust_remote_code=model_config.trust_remote_code,
|
||||
)
|
||||
|
||||
# Test detecting the tokenizer's chat_template
|
||||
@@ -2177,7 +2227,7 @@ def test_resolve_content_format_fallbacks(model, expected_format):
|
||||
tokenizer,
|
||||
chat_template=None,
|
||||
tools=None,
|
||||
model_config=renderer_config.model_config,
|
||||
model_config=model_config,
|
||||
)
|
||||
assert isinstance(chat_template, str)
|
||||
|
||||
@@ -2191,7 +2241,7 @@ def test_resolve_content_format_fallbacks(model, expected_format):
|
||||
None,
|
||||
"auto",
|
||||
tokenizer,
|
||||
renderer_config=renderer_config,
|
||||
model_config=model_config,
|
||||
)
|
||||
|
||||
assert resolved_format == expected_format
|
||||
@@ -2222,13 +2272,15 @@ def test_resolve_content_format_fallbacks(model, expected_format):
|
||||
],
|
||||
)
|
||||
def test_resolve_content_format_examples(template_path, expected_format):
|
||||
model = PHI3V_MODEL_ID # Dummy
|
||||
model_config = ModelConfig(model, trust_remote_code=True)
|
||||
renderer_config = RendererConfig(model_config=model_config, tokenizer=model)
|
||||
model_config = ModelConfig(
|
||||
PHI3V_MODEL_ID, # Dummy
|
||||
tokenizer=PHI3V_MODEL_ID, # Dummy
|
||||
trust_remote_code=True,
|
||||
)
|
||||
|
||||
dummy_tokenizer = get_tokenizer(
|
||||
renderer_config.tokenizer,
|
||||
trust_remote_code=renderer_config.trust_remote_code,
|
||||
PHI3V_MODEL_ID, # Dummy
|
||||
trust_remote_code=model_config.trust_remote_code,
|
||||
)
|
||||
dummy_tokenizer.chat_template = None
|
||||
|
||||
@@ -2245,7 +2297,7 @@ def test_resolve_content_format_examples(template_path, expected_format):
|
||||
None,
|
||||
"auto",
|
||||
dummy_tokenizer,
|
||||
renderer_config=renderer_config,
|
||||
model_config=model_config,
|
||||
)
|
||||
|
||||
assert resolved_format == expected_format
|
||||
@@ -2280,7 +2332,7 @@ def test_parse_chat_messages_include_thinking_chunk(mistral_model_config):
|
||||
|
||||
conversation_with_thinking, _, _ = parse_chat_messages(
|
||||
messages,
|
||||
RendererConfig(model_config=mistral_model_config),
|
||||
mistral_model_config,
|
||||
content_format="openai",
|
||||
)
|
||||
|
||||
@@ -2380,7 +2432,7 @@ def test_parse_chat_messages_single_empty_audio_with_uuid(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=qwen2_audio_model_config),
|
||||
qwen2_audio_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
@@ -2414,7 +2466,7 @@ async def test_parse_chat_messages_single_empty_audio_with_uuid_async(
|
||||
],
|
||||
}
|
||||
],
|
||||
RendererConfig(model_config=qwen2_audio_model_config),
|
||||
qwen2_audio_model_config,
|
||||
content_format="string",
|
||||
)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import torch
|
||||
from safetensors.torch import load_file
|
||||
from torch import nn
|
||||
|
||||
from vllm.config import ModelConfig, RendererConfig, VllmConfig
|
||||
from vllm.config import ModelConfig, VllmConfig
|
||||
from vllm.config.lora import LoRAConfig
|
||||
from vllm.lora.layers import (
|
||||
ColumnParallelLinearWithLoRA,
|
||||
@@ -422,11 +422,7 @@ def test_lru_cache_worker_adapter_manager(dist_init, dummy_model, device, tmp_pa
|
||||
)
|
||||
|
||||
model_config = ModelConfig(max_model_len=16)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
lora_config=lora_config,
|
||||
)
|
||||
vllm_config = VllmConfig(model_config=model_config, lora_config=lora_config)
|
||||
|
||||
vllm_config.scheduler_config.max_num_seqs = 4
|
||||
vllm_config.scheduler_config.max_num_batched_tokens = 2
|
||||
@@ -529,11 +525,7 @@ def test_worker_adapter_manager(dist_init, dummy_model_gate_up, device, tmp_path
|
||||
)
|
||||
|
||||
model_config = ModelConfig(max_model_len=16)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
lora_config=lora_config,
|
||||
)
|
||||
vllm_config = VllmConfig(model_config=model_config, lora_config=lora_config)
|
||||
|
||||
vllm_config.scheduler_config.max_num_seqs = 4
|
||||
vllm_config.scheduler_config.max_num_batched_tokens = 2
|
||||
|
||||
@@ -11,7 +11,6 @@ from vllm.config import (
|
||||
DeviceConfig,
|
||||
ModelConfig,
|
||||
ParallelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
)
|
||||
@@ -44,7 +43,6 @@ def test_worker_apply_lora(qwen3_lora_files):
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
load_config=LoadConfig(
|
||||
download_dir=None,
|
||||
load_format="dummy",
|
||||
|
||||
@@ -42,10 +42,8 @@ def test_model_loading_with_params(vllm_runner, monkeypatch):
|
||||
"Write a short story about a robot that dreams for the first time.\n"
|
||||
)
|
||||
|
||||
llm_engine = vllm_model.llm.llm_engine
|
||||
model_config = llm_engine.model_config
|
||||
renderer_config = llm_engine.renderer_config
|
||||
tokenizer = llm_engine.tokenizer
|
||||
model_config = vllm_model.llm.llm_engine.model_config
|
||||
model_tokenizer = vllm_model.llm.llm_engine.tokenizer
|
||||
|
||||
# asserts on the bert model config file
|
||||
assert model_config.encoder_config["max_seq_length"] == 512
|
||||
@@ -56,8 +54,8 @@ def test_model_loading_with_params(vllm_runner, monkeypatch):
|
||||
assert model_config.pooler_config.normalize
|
||||
|
||||
# asserts on the tokenizer loaded
|
||||
assert renderer_config.tokenizer == "BAAI/bge-base-en-v1.5"
|
||||
assert tokenizer.model_max_length == 512
|
||||
assert model_config.tokenizer == "BAAI/bge-base-en-v1.5"
|
||||
assert model_tokenizer.model_max_length == 512
|
||||
|
||||
def check_model(model):
|
||||
assert isinstance(model, BertEmbeddingModel)
|
||||
@@ -88,10 +86,8 @@ def test_roberta_model_loading_with_params(vllm_runner, monkeypatch):
|
||||
"Write a short story about a robot that dreams for the first time.\n"
|
||||
)
|
||||
|
||||
llm_engine = vllm_model.llm.llm_engine
|
||||
model_config = llm_engine.model_config
|
||||
renderer_config = llm_engine.renderer_config
|
||||
tokenizer = llm_engine.tokenizer
|
||||
model_config = vllm_model.llm.llm_engine.model_config
|
||||
model_tokenizer = vllm_model.llm.llm_engine.tokenizer
|
||||
|
||||
# asserts on the bert model config file
|
||||
assert model_config.encoder_config["max_seq_length"] == 512
|
||||
@@ -102,8 +98,8 @@ def test_roberta_model_loading_with_params(vllm_runner, monkeypatch):
|
||||
assert model_config.pooler_config.normalize
|
||||
|
||||
# asserts on the tokenizer loaded
|
||||
assert renderer_config.tokenizer == "intfloat/multilingual-e5-base"
|
||||
assert tokenizer.model_max_length == 512
|
||||
assert model_config.tokenizer == "intfloat/multilingual-e5-base"
|
||||
assert model_tokenizer.model_max_length == 512
|
||||
|
||||
def check_model(model):
|
||||
assert isinstance(model, RobertaEmbeddingModel)
|
||||
@@ -132,7 +128,7 @@ def test_facebook_roberta_model_loading_with_params(vllm_runner, monkeypatch):
|
||||
"Write a short story about a robot that dreams for the first time.\n"
|
||||
)
|
||||
|
||||
assert vllm_model.llm.llm_engine.renderer_config.tokenizer == model_name
|
||||
assert vllm_model.llm.llm_engine.model_config.tokenizer == model_name
|
||||
|
||||
def check_model(model):
|
||||
assert isinstance(model, RobertaEmbeddingModel)
|
||||
|
||||
@@ -6,7 +6,7 @@ import pytest
|
||||
from scipy.spatial.distance import cosine
|
||||
|
||||
from vllm import LLM, SamplingParams
|
||||
from vllm.config import ModelConfig, RendererConfig
|
||||
from vllm.config import ModelConfig
|
||||
|
||||
from ....utils import RemoteOpenAIServer
|
||||
|
||||
@@ -31,8 +31,7 @@ def test_find_array():
|
||||
dtype="bfloat16",
|
||||
seed=0,
|
||||
)
|
||||
renderer_config = RendererConfig(model_config=model_config)
|
||||
pooling = GritLMMeanPool(renderer_config=renderer_config)
|
||||
pooling = GritLMMeanPool(model_config=model_config)
|
||||
|
||||
arr = _arr([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ from vllm.multimodal.processing import BaseMultiModalProcessor, InputProcessingC
|
||||
from vllm.tokenizers import (
|
||||
MistralTokenizer,
|
||||
TokenizerLike,
|
||||
cached_tokenizer_from_config,
|
||||
)
|
||||
|
||||
from ....multimodal.utils import random_audio, random_image, random_video
|
||||
@@ -211,20 +212,31 @@ def _test_processing_correctness(
|
||||
else:
|
||||
model_info = HF_EXAMPLE_MODELS.find_hf_info(model_id_or_arch)
|
||||
model_id = model_id_or_arch
|
||||
|
||||
model_info.check_available_online(on_fail="skip")
|
||||
model_info.check_transformers_version(on_fail="skip")
|
||||
|
||||
renderer_config = model_info.build_renderer_config(
|
||||
model=model_id,
|
||||
model_config = ModelConfig(
|
||||
model_id,
|
||||
tokenizer=model_info.tokenizer or model_id,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
# Ensure that the cache can fit all of the data
|
||||
mm_processor_cache_gb=2048,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=model_info.dtype,
|
||||
)
|
||||
model_config = renderer_config.model_config
|
||||
|
||||
model_cls = MULTIMODAL_REGISTRY._get_model_cls(model_config)
|
||||
factories = model_cls._processor_factory
|
||||
ctx = InputProcessingContext.from_config(renderer_config)
|
||||
ctx = InputProcessingContext(
|
||||
model_config,
|
||||
tokenizer=cached_tokenizer_from_config(model_config),
|
||||
)
|
||||
cache = MultiModalProcessorOnlyCache(model_config)
|
||||
|
||||
processing_info = factories.info(ctx)
|
||||
|
||||
@@ -40,7 +40,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"video": 1},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
tokenizer = processor.info.get_tokenizer()
|
||||
hf_processor_mm_kwargs = {"fps": fps}
|
||||
|
||||
@@ -79,7 +79,7 @@ def test_video_loader_consistency(
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"video": 1},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {"fps": fps}
|
||||
|
||||
# Build the image str / prompt based on the number of images we pass
|
||||
|
||||
@@ -162,7 +162,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": len(size_factors)},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
min_num = min_dynamic_patch if dynamic_image_size else 1
|
||||
|
||||
@@ -38,7 +38,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
# Build the image str / prompt based on the number of images we pass
|
||||
|
||||
@@ -116,7 +116,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": len(size_factors)},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
min_num = min_dynamic_patch if dynamic_image_size else 1
|
||||
|
||||
@@ -30,7 +30,7 @@ def test_processor_override(
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
mm_processor_cache_gb=mm_processor_cache_gb,
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
config = processor.info.get_hf_config()
|
||||
tokenizer = processor.info.get_tokenizer()
|
||||
hf_processor = processor.info.get_hf_processor()
|
||||
|
||||
@@ -42,7 +42,7 @@ def test_processor_max_tokens(model_id):
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": 1},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
info = processor.info
|
||||
|
||||
seen_aspect_ratios = set[float]()
|
||||
@@ -140,7 +140,7 @@ def test_processor_prompt_replacements_regression(model_id, num_imgs):
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
|
||||
image_ratios = [
|
||||
(171, 152),
|
||||
@@ -173,7 +173,7 @@ def test_processor_prompt_replacements_all(model_id, num_imgs):
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
|
||||
seen_aspect_ratios = set[float]()
|
||||
image_sizes = list[ImageSize]()
|
||||
|
||||
@@ -42,7 +42,7 @@ def test_processor_max_tokens(model_id):
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": 1},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
info = processor.info
|
||||
|
||||
seen_aspect_ratios = set[float]()
|
||||
@@ -138,7 +138,7 @@ def test_processor_prompt_replacements_regression(model_id, num_imgs):
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
|
||||
image_ratios = [
|
||||
(171, 152),
|
||||
@@ -171,7 +171,7 @@ def test_processor_prompt_replacements_all(model_id, num_imgs):
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
|
||||
seen_aspect_ratios = set[float]()
|
||||
image_sizes = list[ImageSize]()
|
||||
|
||||
@@ -24,7 +24,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
prompt = "<image>" * num_imgs
|
||||
image = Image.new("RGB", size=(364, 364))
|
||||
mm_data = {"image": [image] * num_imgs}
|
||||
@@ -83,7 +83,7 @@ def test_processor_prompt_replacements_regression(model_id, num_imgs):
|
||||
mm_processor_kwargs=None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
|
||||
image_ratios = [
|
||||
(171, 152),
|
||||
|
||||
@@ -25,7 +25,7 @@ def test_profiling(model_id: str, max_model_len: int):
|
||||
limit_mm_per_prompt=mm_counts,
|
||||
)
|
||||
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
profiler = MultiModalProfiler(processor)
|
||||
|
||||
decoder_dummy_data = profiler.get_decoder_dummy_data(
|
||||
|
||||
@@ -118,7 +118,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": len(size_factors)},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
min_num = min_dynamic_patch if dynamic_image_size else 1
|
||||
|
||||
@@ -39,7 +39,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
# Build the image str / prompt based on the number of images we pass
|
||||
|
||||
@@ -39,7 +39,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
# Build the image str / prompt based on the number of images we pass
|
||||
|
||||
@@ -34,7 +34,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
tokenizer = processor.info.get_tokenizer()
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ def test_processor_override(
|
||||
mm_processor_kwargs=mm_processor_kwargs if kwargs_on_init else None,
|
||||
limit_mm_per_prompt={"image": num_imgs},
|
||||
)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(ctx.model_config)
|
||||
hf_processor_mm_kwargs = {} if kwargs_on_init else mm_processor_kwargs
|
||||
|
||||
# Build the image str / prompt based on the number of images we pass
|
||||
|
||||
@@ -11,7 +11,7 @@ import pytest
|
||||
import torch.nn as nn
|
||||
from PIL import Image
|
||||
|
||||
from vllm.config import ModelConfig, RendererConfig, VllmConfig, set_current_vllm_config
|
||||
from vllm.config import ModelConfig, VllmConfig, set_current_vllm_config
|
||||
from vllm.config.multimodal import (
|
||||
AudioDummyOptions,
|
||||
BaseDummyOptions,
|
||||
@@ -31,6 +31,7 @@ from vllm.multimodal import MULTIMODAL_REGISTRY, BatchedTensorInputs
|
||||
from vllm.multimodal.processing import BaseMultiModalProcessor, InputProcessingContext
|
||||
from vllm.multimodal.utils import group_mm_kwargs_by_modality
|
||||
from vllm.platforms import current_platform
|
||||
from vllm.tokenizers import cached_tokenizer_from_config
|
||||
from vllm.utils.collection_utils import is_list_of
|
||||
from vllm.utils.torch_utils import set_default_torch_dtype
|
||||
|
||||
@@ -149,10 +150,7 @@ def initialize_dummy_model(
|
||||
backend="nccl",
|
||||
)
|
||||
initialize_model_parallel(tensor_model_parallel_size=1)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
)
|
||||
vllm_config = VllmConfig(model_config=model_config)
|
||||
with set_current_vllm_config(vllm_config=vllm_config):
|
||||
with set_default_torch_dtype(model_config.dtype):
|
||||
model = model_cls(vllm_config=vllm_config)
|
||||
@@ -184,12 +182,19 @@ def test_model_tensor_schema(model_id: str):
|
||||
else:
|
||||
dtype = model_info.dtype
|
||||
|
||||
renderer_config = model_info.build_renderer_config(
|
||||
model_config = ModelConfig(
|
||||
model_id,
|
||||
tokenizer=model_info.tokenizer or model_id,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
hf_overrides=hf_overrides_fn,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=dtype,
|
||||
)
|
||||
model_config = renderer_config.model_config
|
||||
|
||||
model_cls = MULTIMODAL_REGISTRY._get_model_cls(model_config)
|
||||
assert supports_multimodal(model_cls)
|
||||
@@ -207,7 +212,10 @@ def test_model_tensor_schema(model_id: str):
|
||||
if not any(inputs_parse_methods):
|
||||
pytest.skip(f"{model_arch} does not support tensor schema validation.")
|
||||
|
||||
ctx = InputProcessingContext.from_config(renderer_config)
|
||||
ctx = InputProcessingContext(
|
||||
model_config,
|
||||
tokenizer=cached_tokenizer_from_config(model_config),
|
||||
)
|
||||
processing_info = factories.info(ctx)
|
||||
supported_mm_limits = processing_info.get_supported_mm_limits()
|
||||
limit_mm_per_prompt = {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import pytest
|
||||
|
||||
from vllm.assets.image import ImageAsset
|
||||
from vllm.config import ModelConfig, RendererConfig
|
||||
from vllm.config import ModelConfig
|
||||
from vllm.multimodal import MULTIMODAL_REGISTRY
|
||||
|
||||
|
||||
@@ -13,9 +13,8 @@ def test_multimodal_processor(model_id):
|
||||
model=model_id,
|
||||
model_impl="transformers",
|
||||
)
|
||||
renderer_config = RendererConfig(model_config=model_config)
|
||||
|
||||
mm_processor = MULTIMODAL_REGISTRY.create_processor(renderer_config)
|
||||
mm_processor = MULTIMODAL_REGISTRY.create_processor(model_config)
|
||||
|
||||
image_pil = ImageAsset("cherry_blossom").pil_image
|
||||
mm_data = {"image": image_pil}
|
||||
|
||||
@@ -7,6 +7,7 @@ import torch
|
||||
import transformers
|
||||
from transformers import AutoConfig, PreTrainedModel
|
||||
|
||||
from vllm.config import ModelConfig
|
||||
from vllm.model_executor.models.utils import WeightsMapper
|
||||
from vllm.multimodal import MULTIMODAL_REGISTRY
|
||||
from vllm.transformers_utils.config import try_get_safetensors_metadata
|
||||
@@ -49,11 +50,37 @@ def test_hf_model_weights_mapper(model_arch: str):
|
||||
model_info.check_available_online(on_fail="skip")
|
||||
model_info.check_transformers_version(on_fail="skip")
|
||||
|
||||
model_config = model_info.build_model_config(config_format="hf")
|
||||
is_mistral_model = model_arch in [
|
||||
"Mistral3ForConditionalGeneration",
|
||||
"PixtralForConditionalGeneration",
|
||||
"VoxtralForConditionalGeneration",
|
||||
]
|
||||
|
||||
if not is_mistral_model or model_info.tokenizer_mode == "mistral":
|
||||
tokenizer_mode = model_info.tokenizer_mode
|
||||
else:
|
||||
tokenizer_mode = "hf"
|
||||
|
||||
model_id = model_info.default
|
||||
|
||||
model_config = ModelConfig(
|
||||
model_id,
|
||||
tokenizer=model_info.tokenizer or model_id,
|
||||
tokenizer_mode=tokenizer_mode,
|
||||
config_format="hf",
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
dtype=model_info.dtype,
|
||||
)
|
||||
model_cls = MULTIMODAL_REGISTRY._get_model_cls(model_config)
|
||||
|
||||
original_weights = create_repo_dummy_weights(model_config.model)
|
||||
hf_dummy_model = create_dummy_model(model_config.model, model_arch)
|
||||
original_weights = create_repo_dummy_weights(model_id)
|
||||
hf_dummy_model = create_dummy_model(model_id, model_arch)
|
||||
hf_converted_weights = hf_dummy_model.named_parameters()
|
||||
hf_converted_buffers = hf_dummy_model.named_buffers()
|
||||
mapper: WeightsMapper = model_cls.hf_to_vllm_mapper
|
||||
|
||||
@@ -9,8 +9,7 @@ import pytest
|
||||
from packaging.version import Version
|
||||
from transformers import __version__ as TRANSFORMERS_VERSION
|
||||
|
||||
from vllm.config.model import ModelConfig, ModelDType
|
||||
from vllm.config.renderer import RendererConfig, TokenizerMode
|
||||
from vllm.config.model import ModelDType, TokenizerMode
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -171,36 +170,6 @@ class _HfExamplesInfo:
|
||||
else:
|
||||
pytest.skip(msg)
|
||||
|
||||
def build_model_config(self, model: str | None = None, **kwargs) -> ModelConfig:
|
||||
if model is None:
|
||||
model = self.default
|
||||
|
||||
return ModelConfig(
|
||||
**{
|
||||
"model": model,
|
||||
"revision": self.revision,
|
||||
"trust_remote_code": self.trust_remote_code,
|
||||
"hf_overrides": self.hf_overrides,
|
||||
"enable_prompt_embeds": self.require_embed_inputs,
|
||||
"enable_mm_embeds": self.require_embed_inputs,
|
||||
"enforce_eager": self.enforce_eager,
|
||||
"dtype": self.dtype,
|
||||
**kwargs,
|
||||
}
|
||||
)
|
||||
|
||||
def build_renderer_config(
|
||||
self, model: str | None = None, **kwargs
|
||||
) -> RendererConfig:
|
||||
model_config = self.build_model_config(model, **kwargs)
|
||||
|
||||
return RendererConfig(
|
||||
model_config=model_config,
|
||||
tokenizer=self.tokenizer or model_config.model,
|
||||
tokenizer_mode=self.tokenizer_mode,
|
||||
skip_tokenizer_init=self.require_embed_inputs,
|
||||
)
|
||||
|
||||
|
||||
_TEXT_GENERATION_EXAMPLE_MODELS = {
|
||||
# [Decoder-only]
|
||||
|
||||
@@ -13,6 +13,7 @@ from transformers import PretrainedConfig
|
||||
from vllm.config.model import ModelConfig, ModelDType, RunnerOption
|
||||
from vllm.logprobs import Logprob, PromptLogprobs, SampleLogprobs
|
||||
from vllm.multimodal.processing import InputProcessingContext
|
||||
from vllm.tokenizers import cached_tokenizer_from_config
|
||||
|
||||
from .. import ci_envs
|
||||
from .registry import HF_EXAMPLE_MODELS
|
||||
@@ -295,18 +296,30 @@ def build_model_context(
|
||||
|
||||
model_config_kwargs = model_config_kwargs or {}
|
||||
limit_mm_per_prompt = limit_mm_per_prompt or {}
|
||||
renderer_config = model_info.build_renderer_config(
|
||||
model_config = ModelConfig(
|
||||
model_id,
|
||||
runner=runner,
|
||||
tokenizer=model_info.tokenizer or model_id,
|
||||
tokenizer_mode=model_info.tokenizer_mode,
|
||||
revision=model_info.revision,
|
||||
trust_remote_code=model_info.trust_remote_code,
|
||||
dtype=dtype,
|
||||
seed=0,
|
||||
mm_processor_kwargs=mm_processor_kwargs,
|
||||
limit_mm_per_prompt=limit_mm_per_prompt,
|
||||
mm_processor_cache_gb=mm_processor_cache_gb,
|
||||
hf_overrides=model_info.hf_overrides,
|
||||
skip_tokenizer_init=model_info.require_embed_inputs,
|
||||
enable_prompt_embeds=model_info.require_embed_inputs,
|
||||
enable_mm_embeds=model_info.require_embed_inputs,
|
||||
enforce_eager=model_info.enforce_eager,
|
||||
**model_config_kwargs,
|
||||
)
|
||||
|
||||
return InputProcessingContext.from_config(renderer_config)
|
||||
return InputProcessingContext(
|
||||
model_config,
|
||||
tokenizer=cached_tokenizer_from_config(model_config),
|
||||
)
|
||||
|
||||
|
||||
def check_embeddings_close(
|
||||
|
||||
@@ -6,7 +6,7 @@ import numpy as np
|
||||
import pytest
|
||||
import torch
|
||||
|
||||
from vllm.config import ModelConfig, ParallelConfig, RendererConfig, VllmConfig
|
||||
from vllm.config import ModelConfig, ParallelConfig, VllmConfig
|
||||
from vllm.multimodal import MULTIMODAL_REGISTRY
|
||||
from vllm.multimodal.cache import (
|
||||
BaseMultiModalProcessorCache,
|
||||
@@ -110,14 +110,11 @@ def _create_vllm_config(
|
||||
mm_processor_cache_gb: float,
|
||||
enable_ipc: bool,
|
||||
):
|
||||
model_config = ModelConfig(
|
||||
model="llava-hf/llava-onevision-qwen2-0.5b-ov-hf",
|
||||
mm_processor_cache_gb=mm_processor_cache_gb,
|
||||
)
|
||||
|
||||
return VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
model_config=ModelConfig(
|
||||
model="llava-hf/llava-onevision-qwen2-0.5b-ov-hf",
|
||||
mm_processor_cache_gb=mm_processor_cache_gb,
|
||||
),
|
||||
parallel_config=ParallelConfig(data_parallel_size=1 if enable_ipc else 2),
|
||||
)
|
||||
|
||||
@@ -509,15 +506,13 @@ def _run_test_cache_eviction_shm(
|
||||
|
||||
|
||||
def test_cache_eviction_shm_cache():
|
||||
model_config = ModelConfig(
|
||||
model="llava-hf/llava-onevision-qwen2-0.5b-ov-hf",
|
||||
mm_processor_cache_type="shm",
|
||||
mm_shm_cache_max_object_size_mb=6,
|
||||
mm_processor_cache_gb=15.2 * MiB_bytes / GiB_bytes,
|
||||
)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
model_config=ModelConfig(
|
||||
model="llava-hf/llava-onevision-qwen2-0.5b-ov-hf",
|
||||
mm_processor_cache_type="shm",
|
||||
mm_shm_cache_max_object_size_mb=6,
|
||||
mm_processor_cache_gb=15.2 * MiB_bytes / GiB_bytes,
|
||||
),
|
||||
)
|
||||
sender_cache = ShmObjectStoreSenderCache(vllm_config)
|
||||
receiver_cache = ShmObjectStoreReceiverCache(vllm_config, mp.Lock())
|
||||
|
||||
@@ -7,7 +7,7 @@ from contextlib import nullcontext
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from vllm.config import ModelConfig, RendererConfig
|
||||
from vllm.config import ModelConfig
|
||||
from vllm.multimodal import MULTIMODAL_REGISTRY
|
||||
from vllm.multimodal.processing import (
|
||||
InputProcessingContext,
|
||||
@@ -920,9 +920,8 @@ def test_limit_mm_per_prompt_dummy(model_id, limit, num_supported, is_valid):
|
||||
model=model_id,
|
||||
limit_mm_per_prompt=limit_mm_per_prompt,
|
||||
)
|
||||
renderer_config = RendererConfig(model_config=model_config)
|
||||
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(model_config)
|
||||
processor._supported_mm_limits = {"image": num_supported}
|
||||
|
||||
profiler = MultiModalProfiler(processor)
|
||||
@@ -956,9 +955,8 @@ def test_limit_mm_per_prompt_apply(model_id, num_images, limit, is_valid):
|
||||
model=model_id,
|
||||
limit_mm_per_prompt=limit_mm_per_prompt,
|
||||
)
|
||||
renderer_config = RendererConfig(model_config=model_config)
|
||||
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(renderer_config)
|
||||
processor = MULTIMODAL_REGISTRY.create_processor(model_config)
|
||||
|
||||
rng = np.random.RandomState(0)
|
||||
image = random_image(rng, min_wh=128, max_wh=256)
|
||||
@@ -1014,13 +1012,11 @@ def test_hf_processor_init_kwargs(
|
||||
inference_kwargs,
|
||||
expected_kwargs,
|
||||
):
|
||||
model_config = ModelConfig(model_id, mm_processor_kwargs=config_kwargs)
|
||||
renderer_config = RendererConfig(
|
||||
model_config=model_config,
|
||||
tokenizer=model_id,
|
||||
ctx = InputProcessingContext(
|
||||
model_config=ModelConfig(model_id, mm_processor_kwargs=config_kwargs),
|
||||
tokenizer=None,
|
||||
)
|
||||
|
||||
ctx = InputProcessingContext.from_config(renderer_config)
|
||||
processor = ctx.get_hf_processor(
|
||||
DummyProcessor, # type: ignore[arg-type]
|
||||
**inference_kwargs,
|
||||
@@ -1049,13 +1045,11 @@ def test_hf_processor_call_kwargs(
|
||||
inference_kwargs,
|
||||
expected_kwargs,
|
||||
):
|
||||
model_config = ModelConfig(model_id, mm_processor_kwargs=config_kwargs)
|
||||
renderer_config = RendererConfig(
|
||||
model_config=model_config,
|
||||
tokenizer=model_id,
|
||||
ctx = InputProcessingContext(
|
||||
model_config=ModelConfig(model_id, mm_processor_kwargs=config_kwargs),
|
||||
tokenizer=None,
|
||||
)
|
||||
|
||||
ctx = InputProcessingContext.from_config(renderer_config)
|
||||
processor = ctx.get_hf_processor(DummyProcessor) # type: ignore[arg-type]
|
||||
|
||||
result = ctx.call_hf_processor(processor, {}, inference_kwargs)
|
||||
|
||||
@@ -31,6 +31,4 @@ def test_supports_multimodal_inputs(model_id, limit_mm_per_prompt, expected):
|
||||
model_id,
|
||||
limit_mm_per_prompt=limit_mm_per_prompt,
|
||||
)
|
||||
assert (
|
||||
MULTIMODAL_REGISTRY.supports_multimodal_inputs(ctx.renderer_config) is expected
|
||||
)
|
||||
assert MULTIMODAL_REGISTRY.supports_multimodal_inputs(ctx.model_config) is expected
|
||||
|
||||
@@ -13,7 +13,6 @@ from vllm.config import (
|
||||
CompilationConfig,
|
||||
ModelConfig,
|
||||
PoolerConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
update_config,
|
||||
@@ -477,41 +476,27 @@ def test_load_config_pt_load_map_location(pt_load_map_location):
|
||||
("deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", 131073, 131072, True),
|
||||
],
|
||||
)
|
||||
def test_recalculate_max_model_len(
|
||||
def test_get_and_verify_max_len(
|
||||
model_id, max_model_len, expected_max_len, should_raise
|
||||
):
|
||||
"""Test recalculate_max_model_len with different configurations."""
|
||||
"""Test get_and_verify_max_len with different configurations."""
|
||||
model_config = ModelConfig(model_id)
|
||||
|
||||
if should_raise:
|
||||
with pytest.raises(ValueError):
|
||||
model_config.recalculate_max_model_len(
|
||||
max_model_len,
|
||||
tokenizer=model_id,
|
||||
tokenizer_revision=None,
|
||||
)
|
||||
model_config.get_and_verify_max_len(max_model_len)
|
||||
else:
|
||||
model_config.recalculate_max_model_len(
|
||||
max_model_len,
|
||||
tokenizer=model_id,
|
||||
tokenizer_revision=None,
|
||||
)
|
||||
assert model_config.max_model_len == expected_max_len
|
||||
actual_max_len = model_config.get_and_verify_max_len(max_model_len)
|
||||
assert actual_max_len == expected_max_len
|
||||
|
||||
|
||||
class MockModelConfig:
|
||||
"""Simple mock object for testing maybe_pull_model_for_runai"""
|
||||
class MockConfig:
|
||||
"""Simple mock object for testing maybe_pull_model_tokenizer_for_runai"""
|
||||
|
||||
def __init__(self, model: str):
|
||||
def __init__(self, model: str, tokenizer: str):
|
||||
self.model = model
|
||||
|
||||
|
||||
class MockRendererConfig:
|
||||
"""Simple mock object for testing maybe_pull_tokenizer_for_runai"""
|
||||
|
||||
def __init__(self, model_config: MockModelConfig):
|
||||
self.model_config = model_config
|
||||
self.tokenizer = model_config.model
|
||||
self.tokenizer = tokenizer
|
||||
self.model_weights = None
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
@@ -529,65 +514,59 @@ def test_s3_url_model_tokenizer_paths(mock_pull_files, s3_url):
|
||||
mock_pull_files.return_value = None
|
||||
|
||||
# Create first mock and run the method
|
||||
model_config1 = MockModelConfig(model=s3_url)
|
||||
renderer_config1 = MockRendererConfig(model_config=model_config1)
|
||||
ModelConfig.maybe_pull_model_for_runai(model_config1, s3_url)
|
||||
RendererConfig.maybe_pull_tokenizer_for_runai(renderer_config1, s3_url)
|
||||
config1 = MockConfig(model=s3_url, tokenizer=s3_url)
|
||||
ModelConfig.maybe_pull_model_tokenizer_for_runai(config1, s3_url, s3_url)
|
||||
|
||||
# Check that model and tokenizer point to existing directories
|
||||
assert os.path.exists(model_config1.model), (
|
||||
f"Model directory does not exist: {model_config1.model}"
|
||||
assert os.path.exists(config1.model), (
|
||||
f"Model directory does not exist: {config1.model}"
|
||||
)
|
||||
assert os.path.isdir(model_config1.model), (
|
||||
f"Model path is not a directory: {model_config1.model}"
|
||||
assert os.path.isdir(config1.model), (
|
||||
f"Model path is not a directory: {config1.model}"
|
||||
)
|
||||
assert os.path.exists(renderer_config1.tokenizer), (
|
||||
f"Tokenizer directory does not exist: {renderer_config1.tokenizer}"
|
||||
assert os.path.exists(config1.tokenizer), (
|
||||
f"Tokenizer directory does not exist: {config1.tokenizer}"
|
||||
)
|
||||
assert os.path.isdir(renderer_config1.tokenizer), (
|
||||
f"Tokenizer path is not a directory: {renderer_config1.tokenizer}"
|
||||
assert os.path.isdir(config1.tokenizer), (
|
||||
f"Tokenizer path is not a directory: {config1.tokenizer}"
|
||||
)
|
||||
|
||||
# Verify that the paths are different from the original S3 URL
|
||||
assert model_config1.model != s3_url, (
|
||||
"Model path should be converted to local directory"
|
||||
)
|
||||
assert renderer_config1.tokenizer != s3_url, (
|
||||
assert config1.model != s3_url, "Model path should be converted to local directory"
|
||||
assert config1.tokenizer != s3_url, (
|
||||
"Tokenizer path should be converted to local directory"
|
||||
)
|
||||
|
||||
# Store the original paths
|
||||
created_model_dir = model_config1.model
|
||||
create_tokenizer_dir = renderer_config1.tokenizer
|
||||
created_model_dir = config1.model
|
||||
create_tokenizer_dir = config1.tokenizer
|
||||
|
||||
# Create a new mock and run the method with the same S3 URL
|
||||
model_config2 = MockModelConfig(model=s3_url)
|
||||
renderer_config2 = MockRendererConfig(model_config=model_config2)
|
||||
ModelConfig.maybe_pull_model_for_runai(model_config2, s3_url)
|
||||
RendererConfig.maybe_pull_tokenizer_for_runai(renderer_config2, s3_url)
|
||||
config2 = MockConfig(model=s3_url, tokenizer=s3_url)
|
||||
ModelConfig.maybe_pull_model_tokenizer_for_runai(config2, s3_url, s3_url)
|
||||
|
||||
# Check that the new directories exist
|
||||
assert os.path.exists(model_config2.model), (
|
||||
f"Model directory does not exist: {model_config2.model}"
|
||||
assert os.path.exists(config2.model), (
|
||||
f"Model directory does not exist: {config2.model}"
|
||||
)
|
||||
assert os.path.isdir(model_config2.model), (
|
||||
f"Model path is not a directory: {model_config2.model}"
|
||||
assert os.path.isdir(config2.model), (
|
||||
f"Model path is not a directory: {config2.model}"
|
||||
)
|
||||
assert os.path.exists(renderer_config2.tokenizer), (
|
||||
f"Tokenizer directory does not exist: {renderer_config2.tokenizer}"
|
||||
assert os.path.exists(config2.tokenizer), (
|
||||
f"Tokenizer directory does not exist: {config2.tokenizer}"
|
||||
)
|
||||
assert os.path.isdir(renderer_config2.tokenizer), (
|
||||
f"Tokenizer path is not a directory: {renderer_config2.tokenizer}"
|
||||
assert os.path.isdir(config2.tokenizer), (
|
||||
f"Tokenizer path is not a directory: {config2.tokenizer}"
|
||||
)
|
||||
|
||||
# Verify that the paths are deterministic (same as before)
|
||||
assert model_config2.model == created_model_dir, (
|
||||
assert config2.model == created_model_dir, (
|
||||
f"Model paths are not deterministic. "
|
||||
f"Original: {created_model_dir}, New: {model_config2.model}"
|
||||
f"Original: {created_model_dir}, New: {config2.model}"
|
||||
)
|
||||
assert renderer_config2.tokenizer == create_tokenizer_dir, (
|
||||
assert config2.tokenizer == create_tokenizer_dir, (
|
||||
f"Tokenizer paths are not deterministic. "
|
||||
f"Original: {create_tokenizer_dir}, New: {renderer_config2.tokenizer}"
|
||||
f"Original: {create_tokenizer_dir}, New: {config2.tokenizer}"
|
||||
)
|
||||
|
||||
|
||||
@@ -601,36 +580,28 @@ def test_s3_url_different_models_create_different_directories(mock_pull_files):
|
||||
s3_url2 = "s3://example-bucket-2/model/"
|
||||
|
||||
# Create mocks with different S3 URLs and run the method
|
||||
model_config1 = MockModelConfig(model=s3_url1)
|
||||
renderer_config1 = MockRendererConfig(model_config=model_config1)
|
||||
ModelConfig.maybe_pull_model_for_runai(model_config1, s3_url1)
|
||||
RendererConfig.maybe_pull_tokenizer_for_runai(renderer_config1, s3_url1)
|
||||
config1 = MockConfig(model=s3_url1, tokenizer=s3_url1)
|
||||
ModelConfig.maybe_pull_model_tokenizer_for_runai(config1, s3_url1, s3_url1)
|
||||
|
||||
model_config2 = MockModelConfig(model=s3_url2)
|
||||
renderer_config2 = MockRendererConfig(model_config=model_config2)
|
||||
ModelConfig.maybe_pull_model_for_runai(model_config2, s3_url2)
|
||||
RendererConfig.maybe_pull_tokenizer_for_runai(renderer_config2, s3_url2)
|
||||
config2 = MockConfig(model=s3_url2, tokenizer=s3_url2)
|
||||
ModelConfig.maybe_pull_model_tokenizer_for_runai(config2, s3_url2, s3_url2)
|
||||
|
||||
# Verify that different URLs produce different directories
|
||||
assert model_config1.model != model_config2.model, (
|
||||
assert config1.model != config2.model, (
|
||||
f"Different S3 URLs should create different model directories. "
|
||||
f"URL1 model: {model_config1.model}, URL2 model: {model_config2.model}"
|
||||
f"URL1 model: {config1.model}, URL2 model: {config2.model}"
|
||||
)
|
||||
assert renderer_config1.tokenizer != renderer_config2.tokenizer, (
|
||||
assert config1.tokenizer != config2.tokenizer, (
|
||||
f"Different S3 URLs should create different tokenizer directories. "
|
||||
f"URL1 tokenizer: {renderer_config1.tokenizer}, "
|
||||
f"URL2 tokenizer: {renderer_config2.tokenizer}"
|
||||
f"URL1 tokenizer: {config1.tokenizer}, "
|
||||
f"URL2 tokenizer: {config2.tokenizer}"
|
||||
)
|
||||
|
||||
# Verify that both sets of directories exist
|
||||
assert os.path.exists(model_config1.model) and os.path.isdir(model_config1.model)
|
||||
assert os.path.exists(renderer_config1.tokenizer) and os.path.isdir(
|
||||
renderer_config1.tokenizer
|
||||
)
|
||||
assert os.path.exists(model_config2.model) and os.path.isdir(model_config2.model)
|
||||
assert os.path.exists(renderer_config2.tokenizer) and os.path.isdir(
|
||||
renderer_config2.tokenizer
|
||||
)
|
||||
assert os.path.exists(config1.model) and os.path.isdir(config1.model)
|
||||
assert os.path.exists(config1.tokenizer) and os.path.isdir(config1.tokenizer)
|
||||
assert os.path.exists(config2.model) and os.path.isdir(config2.model)
|
||||
assert os.path.exists(config2.tokenizer) and os.path.isdir(config2.tokenizer)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
import pytest
|
||||
|
||||
from vllm.config import ModelConfig, RendererConfig
|
||||
from vllm.config import ModelConfig
|
||||
from vllm.inputs import zip_enc_dec_prompts
|
||||
from vllm.inputs.parse import parse_raw_prompts
|
||||
from vllm.inputs.preprocess import InputPreprocessor
|
||||
@@ -108,9 +108,8 @@ 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)
|
||||
renderer_config = RendererConfig(model_config=model_config)
|
||||
tokenizer = init_tokenizer_from_config(renderer_config)
|
||||
input_preprocessor = InputPreprocessor(renderer_config, tokenizer)
|
||||
tokenizer = init_tokenizer_from_config(model_config)
|
||||
input_preprocessor = InputPreprocessor(model_config, tokenizer)
|
||||
|
||||
# HF processor adds sep token
|
||||
sep_token_id = tokenizer.vocab[tokenizer.sep_token]
|
||||
|
||||
@@ -16,7 +16,6 @@ from vllm.config import (
|
||||
LoadConfig,
|
||||
ModelConfig,
|
||||
ParallelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
)
|
||||
@@ -217,7 +216,6 @@ def create_vllm_config(
|
||||
|
||||
return VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
parallel_config=parallel_config,
|
||||
scheduler_config=scheduler_config,
|
||||
|
||||
@@ -8,7 +8,7 @@ import pytest
|
||||
import torch
|
||||
|
||||
import vllm.v1.core.kv_cache_utils as kv_cache_utils
|
||||
from vllm.config import ModelConfig, RendererConfig, SchedulerConfig, VllmConfig
|
||||
from vllm.config import ModelConfig, SchedulerConfig, VllmConfig
|
||||
from vllm.lora.request import LoRARequest
|
||||
from vllm.multimodal.inputs import (
|
||||
MultiModalFeatureSpec,
|
||||
@@ -667,10 +667,7 @@ def test_metrics_empty_stats():
|
||||
|
||||
def test_get_kv_cache_configs_multiple_workers():
|
||||
model_config = ModelConfig(max_model_len=16)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
)
|
||||
vllm_config = VllmConfig(model_config=model_config)
|
||||
|
||||
ref_kv_cache_spec = new_kv_cache_spec()
|
||||
same_kv_cache_specs = [
|
||||
@@ -1139,7 +1136,6 @@ def test_estimate_max_model_len(model_id, max_model_len, want_estimated_max_len)
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
scheduler_config=scheduler_config,
|
||||
)
|
||||
|
||||
@@ -1179,7 +1175,6 @@ def test_get_max_concurrency_for_kv_cache_config():
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
scheduler_config=scheduler_config,
|
||||
)
|
||||
|
||||
@@ -1298,10 +1293,7 @@ def test_allocate_with_lookahead():
|
||||
def test_get_kv_cache_config_one_worker():
|
||||
# pass max_model_len to pass check_enough_kv_cache_memory
|
||||
model_config = ModelConfig(max_model_len=16)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
)
|
||||
vllm_config = VllmConfig(model_config=model_config)
|
||||
|
||||
mem_per_block_per_layer = 16 * 2 * 64 * 4 * 2
|
||||
# all layers are full attention -> single group
|
||||
@@ -1592,11 +1584,7 @@ def test_get_kv_cache_config_one_worker():
|
||||
|
||||
def test_get_kv_cache_configs_attention_free():
|
||||
kv_cache_specs: dict[str, KVCacheSpec] = {}
|
||||
model_config = ModelConfig(max_model_len=16)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
)
|
||||
vllm_config = VllmConfig(model_config=ModelConfig(max_model_len=16))
|
||||
kv_cache_configs = get_kv_cache_configs(vllm_config, [kv_cache_specs], [0])
|
||||
assert kv_cache_configs == [
|
||||
KVCacheConfig(
|
||||
|
||||
@@ -11,7 +11,6 @@ from vllm.config import (
|
||||
ECTransferConfig,
|
||||
KVTransferConfig,
|
||||
ModelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
SpeculativeConfig,
|
||||
VllmConfig,
|
||||
@@ -1564,7 +1563,6 @@ def create_scheduler_with_priority(
|
||||
vllm_config = VllmConfig(
|
||||
scheduler_config=scheduler_config,
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
kv_transfer_config=kv_transfer_config,
|
||||
speculative_config=speculative_config,
|
||||
|
||||
@@ -9,7 +9,6 @@ from vllm.config import (
|
||||
ECTransferConfig,
|
||||
KVTransferConfig,
|
||||
ModelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
SpeculativeConfig,
|
||||
VllmConfig,
|
||||
@@ -133,7 +132,6 @@ def create_scheduler(
|
||||
vllm_config = VllmConfig(
|
||||
scheduler_config=scheduler_config,
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
kv_transfer_config=kv_transfer_config,
|
||||
speculative_config=speculative_config,
|
||||
|
||||
@@ -15,7 +15,6 @@ from vllm.config import (
|
||||
ECTransferConfig,
|
||||
KVTransferConfig,
|
||||
ModelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
)
|
||||
@@ -523,7 +522,6 @@ def test_encoder_instance_zero_kv_cache(
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
scheduler_config=scheduler_config,
|
||||
kv_transfer_config=kv_transfer_config,
|
||||
|
||||
@@ -5,14 +5,7 @@ import pytest
|
||||
|
||||
from vllm.assets.image import ImageAsset
|
||||
from vllm.assets.video import VideoAsset
|
||||
from vllm.config import (
|
||||
CacheConfig,
|
||||
DeviceConfig,
|
||||
ModelConfig,
|
||||
MultiModalConfig,
|
||||
RendererConfig,
|
||||
VllmConfig,
|
||||
)
|
||||
from vllm.config import CacheConfig, DeviceConfig, ModelConfig, 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
|
||||
@@ -51,21 +44,22 @@ def _mock_input_processor(
|
||||
monkeypatch.setattr(VllmConfig, "__post_init__", lambda self: None, raising=True)
|
||||
|
||||
model_config = ModelConfig(
|
||||
skip_tokenizer_init=True,
|
||||
max_model_len=128,
|
||||
mm_processor_cache_gb=mm_cache_gb,
|
||||
generation_config="vllm",
|
||||
)
|
||||
model_config.multimodal_config = MultiModalConfig(mm_processor_cache_gb=mm_cache_gb)
|
||||
|
||||
renderer_config = RendererConfig(
|
||||
model_config=model_config,
|
||||
tokenizer="dummy",
|
||||
skip_tokenizer_init=True,
|
||||
)
|
||||
|
||||
# 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,
|
||||
renderer_config=renderer_config,
|
||||
cache_config=CacheConfig(enable_prefix_caching=enable_prefix_caching),
|
||||
device_config=DeviceConfig(device="cpu"),
|
||||
)
|
||||
|
||||
@@ -15,7 +15,6 @@ from vllm.config import (
|
||||
DeviceConfig,
|
||||
KVTransferConfig,
|
||||
ModelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
)
|
||||
@@ -128,7 +127,6 @@ def create_vllm_config(
|
||||
return VllmConfig(
|
||||
scheduler_config=scheduler_config,
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
kv_transfer_config=kv_transfer_config,
|
||||
device_config=DeviceConfig("cpu"),
|
||||
|
||||
@@ -19,7 +19,6 @@ from vllm.config import (
|
||||
DeviceConfig,
|
||||
ModelConfig,
|
||||
ParallelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
SpeculativeConfig,
|
||||
VllmConfig,
|
||||
@@ -62,7 +61,6 @@ def _create_proposer(
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=CacheConfig(),
|
||||
speculative_config=speculative_config,
|
||||
device_config=DeviceConfig(device=current_platform.device_type),
|
||||
|
||||
@@ -18,7 +18,6 @@ from vllm.config import (
|
||||
DeviceConfig,
|
||||
ModelConfig,
|
||||
ParallelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
SpeculativeConfig,
|
||||
VllmConfig,
|
||||
@@ -47,7 +46,6 @@ def _create_mtp_proposer(num_speculative_tokens: int) -> EagleProposer:
|
||||
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=CacheConfig(),
|
||||
speculative_config=speculative_config,
|
||||
device_config=DeviceConfig(device=current_platform.device_type),
|
||||
|
||||
@@ -4,7 +4,6 @@ import numpy as np
|
||||
|
||||
from vllm.config import (
|
||||
ModelConfig,
|
||||
RendererConfig,
|
||||
SpeculativeConfig,
|
||||
VllmConfig,
|
||||
)
|
||||
@@ -70,7 +69,6 @@ def test_ngram_proposer():
|
||||
return NgramProposer(
|
||||
vllm_config=VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
speculative_config=SpeculativeConfig(
|
||||
prompt_lookup_min=min_n,
|
||||
prompt_lookup_max=max_n,
|
||||
|
||||
@@ -6,7 +6,7 @@ from concurrent.futures import Future
|
||||
import pytest
|
||||
from transformers import AutoTokenizer
|
||||
|
||||
from vllm.config import RendererConfig, StructuredOutputsConfig, VllmConfig
|
||||
from vllm.config import StructuredOutputsConfig, VllmConfig
|
||||
from vllm.config.model import ModelConfig
|
||||
from vllm.config.parallel import ParallelConfig
|
||||
from vllm.config.speculative import SpeculativeConfig
|
||||
@@ -72,11 +72,8 @@ def test_backend_guidance_rollback_terminated():
|
||||
def test_grammar_bitmask_with_specdec():
|
||||
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER)
|
||||
prompt = tokenizer.encode('{"a": "b"}')
|
||||
|
||||
model_config = ModelConfig(tokenizer=TOKENIZER)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config, tokenizer=TOKENIZER),
|
||||
model_config=ModelConfig(tokenizer=TOKENIZER),
|
||||
structured_outputs_config=StructuredOutputsConfig(backend="guidance"),
|
||||
speculative_config=SpeculativeConfig(model="[ngram]", num_speculative_tokens=3),
|
||||
)
|
||||
@@ -140,11 +137,8 @@ def test_grammar_init_async_and_sync(async_grammar):
|
||||
|
||||
# Use "external_launcher" for sync mode, None for async mode
|
||||
executor_backend = None if async_grammar else "external_launcher"
|
||||
|
||||
model_config = ModelConfig(tokenizer=TOKENIZER)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config, tokenizer=TOKENIZER),
|
||||
model_config=ModelConfig(tokenizer=TOKENIZER),
|
||||
structured_outputs_config=StructuredOutputsConfig(backend="guidance"),
|
||||
parallel_config=ParallelConfig(distributed_executor_backend=executor_backend),
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ from unittest.mock import Mock
|
||||
|
||||
import pytest
|
||||
|
||||
from vllm.config import ModelConfig, RendererConfig, SchedulerConfig, VllmConfig
|
||||
from vllm.config import ModelConfig, SchedulerConfig, VllmConfig
|
||||
from vllm.reasoning import ReasoningParser
|
||||
from vllm.v1.request import Request
|
||||
from vllm.v1.structured_output import StructuredOutputManager
|
||||
@@ -17,26 +17,19 @@ class TestReasoningStructuredOutput:
|
||||
"""Test reasoning-aware structured output functionality."""
|
||||
|
||||
@pytest.fixture
|
||||
def mock_renderer_config(self):
|
||||
"""Create a mock RendererConfig."""
|
||||
renderer_config = Mock(spec=RendererConfig)
|
||||
renderer_config.skip_tokenizer_init = (
|
||||
True # Skip tokenizer init to avoid network calls
|
||||
)
|
||||
|
||||
model_config = Mock(spec=ModelConfig)
|
||||
model_config.get_vocab_size = Mock(return_value=50000)
|
||||
model_config.trust_remote_code = False
|
||||
def mock_model_config(self):
|
||||
"""Create a mock ModelConfig."""
|
||||
config = Mock(spec=ModelConfig)
|
||||
config.skip_tokenizer_init = True # Skip tokenizer init to avoid network calls
|
||||
config.get_vocab_size = Mock(return_value=50000)
|
||||
# Add missing runner_type attribute that tokenizer initialization expects
|
||||
model_config.runner_type = "generate"
|
||||
renderer_config.model_config = model_config
|
||||
|
||||
config.runner_type = "generate"
|
||||
# Add other attributes that tokenizer initialization might need
|
||||
renderer_config.tokenizer = "test-tokenizer"
|
||||
renderer_config.tokenizer_mode = "auto"
|
||||
renderer_config.tokenizer_revision = None
|
||||
|
||||
return renderer_config
|
||||
config.tokenizer = "test-tokenizer"
|
||||
config.tokenizer_mode = "auto"
|
||||
config.trust_remote_code = False
|
||||
config.tokenizer_revision = None
|
||||
return config
|
||||
|
||||
@pytest.fixture
|
||||
def mock_scheduler_config(self):
|
||||
@@ -46,10 +39,10 @@ class TestReasoningStructuredOutput:
|
||||
return config
|
||||
|
||||
@pytest.fixture
|
||||
def mock_vllm_config(self, mock_renderer_config, mock_scheduler_config):
|
||||
def mock_vllm_config(self, mock_model_config, mock_scheduler_config):
|
||||
"""Create a mock VllmConfig."""
|
||||
config = Mock(spec=VllmConfig)
|
||||
config.renderer_config = mock_renderer_config
|
||||
config.model_config = mock_model_config
|
||||
config.scheduler_config = mock_scheduler_config
|
||||
config.structured_outputs_config = Mock()
|
||||
config.structured_outputs_config.reasoning_parser = None
|
||||
|
||||
@@ -7,7 +7,6 @@ from vllm.attention.layer import Attention
|
||||
from vllm.config import (
|
||||
CacheConfig,
|
||||
ModelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
set_current_vllm_config,
|
||||
@@ -46,7 +45,6 @@ def get_vllm_config():
|
||||
)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
scheduler_config=scheduler_config,
|
||||
)
|
||||
|
||||
@@ -13,7 +13,6 @@ from vllm.config import (
|
||||
CacheConfig,
|
||||
ModelConfig,
|
||||
ParallelConfig,
|
||||
RendererConfig,
|
||||
SchedulerConfig,
|
||||
VllmConfig,
|
||||
set_current_vllm_config,
|
||||
@@ -102,7 +101,6 @@ def get_vllm_config():
|
||||
parallel_config = ParallelConfig()
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
scheduler_config=scheduler_config,
|
||||
parallel_config=parallel_config,
|
||||
@@ -813,7 +811,6 @@ def test_hybrid_attention_mamba_tensor_shapes():
|
||||
attention_config = AttentionConfig(backend=AttentionBackendEnum.FLASHINFER)
|
||||
vllm_config = VllmConfig(
|
||||
model_config=model_config,
|
||||
renderer_config=RendererConfig(model_config=model_config),
|
||||
cache_config=cache_config,
|
||||
scheduler_config=scheduler_config,
|
||||
parallel_config=parallel_config,
|
||||
|
||||
Reference in New Issue
Block a user