2024-09-16 22:17:32 -06:00
|
|
|
from argparse import ArgumentTypeError
|
|
|
|
|
2024-08-15 01:55:42 +08:00
|
|
|
import pytest
|
|
|
|
|
2024-09-16 22:17:32 -06:00
|
|
|
from vllm.engine.arg_utils import EngineArgs, nullable_kvs
|
2024-08-15 01:55:42 +08:00
|
|
|
from vllm.utils import FlexibleArgumentParser
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize(("arg", "expected"), [
|
|
|
|
(None, None),
|
|
|
|
("image=16", {
|
|
|
|
"image": 16
|
|
|
|
}),
|
|
|
|
("image=16,video=2", {
|
|
|
|
"image": 16,
|
|
|
|
"video": 2
|
|
|
|
}),
|
2024-09-16 22:17:32 -06:00
|
|
|
("Image=16, Video=2", {
|
|
|
|
"image": 16,
|
|
|
|
"video": 2
|
|
|
|
}),
|
2024-08-15 01:55:42 +08:00
|
|
|
])
|
|
|
|
def test_limit_mm_per_prompt_parser(arg, expected):
|
|
|
|
parser = EngineArgs.add_cli_args(FlexibleArgumentParser())
|
|
|
|
if arg is None:
|
|
|
|
args = parser.parse_args([])
|
|
|
|
else:
|
|
|
|
args = parser.parse_args(["--limit-mm-per-prompt", arg])
|
|
|
|
|
|
|
|
assert args.limit_mm_per_prompt == expected
|
2024-09-16 22:17:32 -06:00
|
|
|
|
|
|
|
|
2024-11-07 05:42:40 -03:00
|
|
|
def test_valid_pooling_config():
|
|
|
|
parser = EngineArgs.add_cli_args(FlexibleArgumentParser())
|
|
|
|
args = parser.parse_args(["--pooling-type=MEAN"])
|
|
|
|
engine_args = EngineArgs.from_cli_args(args=args)
|
|
|
|
assert engine_args.pooling_type == 'MEAN'
|
|
|
|
|
|
|
|
|
2024-09-16 22:17:32 -06:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
("arg"),
|
|
|
|
[
|
|
|
|
"image", # Missing =
|
|
|
|
"image=4,image=5", # Conflicting values
|
|
|
|
"image=video=4" # Too many = in tokenized arg
|
|
|
|
])
|
|
|
|
def test_bad_nullable_kvs(arg):
|
|
|
|
with pytest.raises(ArgumentTypeError):
|
|
|
|
nullable_kvs(arg)
|
2024-09-23 01:44:48 -06:00
|
|
|
|
|
|
|
|
2024-10-03 20:02:07 +02:00
|
|
|
# yapf: disable
|
|
|
|
@pytest.mark.parametrize(("arg", "expected", "option"), [
|
|
|
|
(None, None, "mm-processor-kwargs"),
|
|
|
|
("{}", {}, "mm-processor-kwargs"),
|
|
|
|
(
|
|
|
|
'{"num_crops": 4}',
|
|
|
|
{
|
|
|
|
"num_crops": 4
|
|
|
|
},
|
|
|
|
"mm-processor-kwargs"
|
|
|
|
),
|
|
|
|
(
|
|
|
|
'{"foo": {"bar": "baz"}}',
|
|
|
|
{
|
|
|
|
"foo":
|
|
|
|
{
|
|
|
|
"bar": "baz"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"mm-processor-kwargs"
|
|
|
|
),
|
|
|
|
(
|
|
|
|
'{"cast_logits_dtype":"bfloat16","sequence_parallel_norm":true,"sequence_parallel_norm_threshold":2048}',
|
|
|
|
{
|
|
|
|
"cast_logits_dtype": "bfloat16",
|
|
|
|
"sequence_parallel_norm": True,
|
|
|
|
"sequence_parallel_norm_threshold": 2048,
|
|
|
|
},
|
|
|
|
"override-neuron-config"
|
|
|
|
),
|
2024-09-23 01:44:48 -06:00
|
|
|
])
|
2024-10-03 20:02:07 +02:00
|
|
|
# yapf: enable
|
|
|
|
def test_composite_arg_parser(arg, expected, option):
|
2024-09-23 01:44:48 -06:00
|
|
|
parser = EngineArgs.add_cli_args(FlexibleArgumentParser())
|
|
|
|
if arg is None:
|
|
|
|
args = parser.parse_args([])
|
|
|
|
else:
|
2024-10-03 20:02:07 +02:00
|
|
|
args = parser.parse_args([f"--{option}", arg])
|
|
|
|
assert getattr(args, option.replace("-", "_")) == expected
|