test_arg_utils.py 1.52 KB
Newer Older
1
2
from argparse import ArgumentTypeError

3
4
import pytest

5
from vllm.engine.arg_utils import EngineArgs, nullable_kvs
6
7
8
9
10
11
12
13
14
15
16
17
from vllm.utils import FlexibleArgumentParser


@pytest.mark.parametrize(("arg", "expected"), [
    (None, None),
    ("image=16", {
        "image": 16
    }),
    ("image=16,video=2", {
        "image": 16,
        "video": 2
    }),
18
19
20
21
    ("Image=16, Video=2", {
        "image": 16,
        "video": 2
    }),
22
23
24
25
26
27
28
29
30
])
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
31
32
33
34
35
36
37
38
39
40
41
42


@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)
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63


@pytest.mark.parametrize(("arg", "expected"), [
    (None, None),
    ("{}", {}),
    ('{"num_crops": 4}', {
        "num_crops": 4
    }),
    ('{"foo": {"bar": "baz"}}', {
        "foo": {
            "bar": "baz"
        }
    }),
])
def test_mm_processor_kwargs_prompt_parser(arg, expected):
    parser = EngineArgs.add_cli_args(FlexibleArgumentParser())
    if arg is None:
        args = parser.parse_args([])
    else:
        args = parser.parse_args(["--mm-processor-kwargs", arg])
    assert args.mm_processor_kwargs == expected