61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
from dataclasses import asdict, dataclass
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
from sglang.test.test_utils import run_doctests
|
|
|
|
register_cuda_ci(est_time=20, suite="stage-b-test-small-1-gpu")
|
|
register_amd_ci(est_time=20, suite="stage-b-test-small-1-gpu-amd")
|
|
|
|
|
|
def test_resolve_evs_config():
|
|
from sglang.srt.multimodal.evs import EVS, EVSConfig, EVSProcessor
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class EVSModelConfig:
|
|
video_pruning_rate: float = 0.1
|
|
spatial_merge_size: int = 2
|
|
|
|
class EVSModel(EVS):
|
|
@staticmethod
|
|
def create_evs_config(hf_config: EVSModelConfig) -> EVSConfig:
|
|
return EVSConfig(
|
|
video_pruning_rate=hf_config.video_pruning_rate,
|
|
spatial_merge_size=hf_config.spatial_merge_size,
|
|
)
|
|
|
|
processor = EVSProcessor(
|
|
hf_config=EVSModelConfig(spatial_merge_size=3),
|
|
config_to_evs_model={EVSModelConfig: EVSModel},
|
|
)
|
|
expected = EVSConfig(video_pruning_rate=0.1, spatial_merge_size=3)
|
|
assert asdict(processor.evs_config) == asdict(expected)
|
|
|
|
# No EVS for pruning rate 0.0
|
|
processor = EVSProcessor(
|
|
hf_config=EVSModelConfig(video_pruning_rate=0.0),
|
|
config_to_evs_model={EVSModelConfig: EVSModel},
|
|
)
|
|
assert processor.evs_config is None
|
|
|
|
# No EVS for non-EVS config
|
|
processor = EVSProcessor(
|
|
hf_config=SimpleNamespace(),
|
|
config_to_evs_model={EVSModelConfig: EVSModel},
|
|
)
|
|
assert processor.evs_config is None
|
|
|
|
|
|
def test_replace_offsets_with_tokens_per_frame():
|
|
from sglang.srt.multimodal.evs.evs_core import replace_offsets_with_tokens_per_frame
|
|
|
|
run_doctests(replace_offsets_with_tokens_per_frame)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
|
|
sys.exit(pytest.main([__file__]))
|