File size: 1,983 Bytes
0d5cf66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python3
"""Align SGLang 0.5.9 video preprocessing with WeMM-Embedding."""

import importlib.metadata
import py_compile
import shutil
from pathlib import Path

import sglang


EXPECTED_VERSION = "0.5.9"
REPLACEMENTS = (
    (
        "IMAGE_FACTOR = 28",
        "IMAGE_FACTOR = 32  # patch_size=16 * spatial_merge_size=2",
    ),
    (
        "    idx = np.linspace(0, total_frames - 1, num=nframes, dtype=np.int64)",
        "    idx = torch.linspace(0, total_frames - 1, nframes).round().long().cpu().numpy()",
    ),
    (
        """    video = torchvision.transforms.functional.resize(
        video,
        [resized_height, resized_width],
        interpolation=InterpolationMode.BILINEAR,
    )
""",
        """    video = torchvision.transforms.functional.resize(
        video,
        [resized_height, resized_width],
        interpolation=InterpolationMode.BICUBIC,
        antialias=True,
    ).float()
""",
    ),
)


def main() -> None:
    version = importlib.metadata.version("sglang")
    if version != EXPECTED_VERSION:
        raise RuntimeError(f"Expected sglang=={EXPECTED_VERSION}, found {version}")

    path = (
        Path(sglang.__file__).resolve().parent
        / "srt"
        / "multimodal"
        / "processors"
        / "qwen_vl.py"
    )
    text = path.read_text(encoding="utf-8")
    if all(new in text for _, new in REPLACEMENTS):
        print("SGLang video preprocessing is ready.")
        return

    updated = text
    for old, new in REPLACEMENTS:
        if updated.count(old) != 1:
            raise RuntimeError(f"Unexpected SGLang source: {old.splitlines()[0]}")
        updated = updated.replace(old, new, 1)

    backup = path.with_suffix(path.suffix + ".original")
    if not backup.exists():
        shutil.copy2(path, backup)
    path.write_text(updated, encoding="utf-8")
    py_compile.compile(str(path), doraise=True)
    print("SGLang video preprocessing is ready.")


if __name__ == "__main__":
    main()