diff --git a/swift/template/templates/mimo.py b/swift/template/templates/mimo.py index c4fd1f54b4..e8e2c21016 100644 --- a/swift/template/templates/mimo.py +++ b/swift/template/templates/mimo.py @@ -1,7 +1,6 @@ # Copyright (c) ModelScope Contributors. All rights reserved. import torch from dataclasses import dataclass, field -from qwen_vl_utils import fetch_image, fetch_video from typing import Any, Dict, List, Optional from ..base import Template @@ -32,6 +31,8 @@ class MiMoV2Template(Template): norm_bbox = 'none' def replace_tag(self, media_type, index, inputs: StdTemplateInputs) -> List[Context]: + from qwen_vl_utils import fetch_image, fetch_video + assert media_type in {'image', 'video'} kwargs = {'image_patch_size': self.processor.image_processor.patch_size} if media_type == 'image': diff --git a/tests/general/test_optional_template_dependencies.py b/tests/general/test_optional_template_dependencies.py new file mode 100644 index 0000000000..9857224df0 --- /dev/null +++ b/tests/general/test_optional_template_dependencies.py @@ -0,0 +1,29 @@ +# Copyright (c) ModelScope Contributors. All rights reserved. +import subprocess +import sys +import unittest + + +class TestOptionalTemplateDependencies(unittest.TestCase): + + def test_template_import_without_qwen_vl_utils(self): + code = """ +import builtins + +original_import = builtins.__import__ + + +def import_without_qwen_vl_utils(name, *args, **kwargs): + if name == 'qwen_vl_utils' or name.startswith('qwen_vl_utils.'): + raise ModuleNotFoundError("No module named 'qwen_vl_utils'") + return original_import(name, *args, **kwargs) + + +builtins.__import__ = import_without_qwen_vl_utils +import swift.template +""" + subprocess.run([sys.executable, '-c', code], check=True) + + +if __name__ == '__main__': + unittest.main()