From 46d653b079256ae4938d549a10cfed5e7a63f55c Mon Sep 17 00:00:00 2001 From: tastelikefeet <58414341+tastelikefeet@users.noreply.github.com> Date: Tue, 19 May 2026 12:53:02 +0800 Subject: [PATCH] Add whitelist to iic and damo (#1720) --- modelscope/models/base/base_model.py | 5 +++-- modelscope/pipelines/builder.py | 5 ++++- modelscope/preprocessors/base.py | 1 + modelscope/trainers/builder.py | 7 +++++-- modelscope/utils/plugins.py | 11 +++++++++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/modelscope/models/base/base_model.py b/modelscope/models/base/base_model.py index 0a693de0..3d735630 100644 --- a/modelscope/models/base/base_model.py +++ b/modelscope/models/base/base_model.py @@ -15,7 +15,7 @@ from modelscope.utils.constant import DEFAULT_MODEL_REVISION, Invoke, ModelFile from modelscope.utils.device import verify_device from modelscope.utils.logger import get_logger from modelscope.utils.plugins import (filter_plugin_in_whitelist, - register_modelhub_repo, + is_trusted_group, register_modelhub_repo, register_plugins_repo) logger = get_logger() @@ -137,7 +137,8 @@ class Model(ABC): kwargs.pop(Invoke.KEY) else: invoked_by = Invoke.PRETRAINED - + trust_remote_code = trust_remote_code or is_trusted_group( + model_name_or_path) ignore_file_pattern = kwargs.pop('ignore_file_pattern', None) if osp.exists(model_name_or_path): local_model_dir = model_name_or_path diff --git a/modelscope/pipelines/builder.py b/modelscope/pipelines/builder.py index 5704a4d9..37eb29d7 100644 --- a/modelscope/pipelines/builder.py +++ b/modelscope/pipelines/builder.py @@ -13,7 +13,7 @@ from modelscope.utils.hub import read_config from modelscope.utils.import_utils import is_transformers_available from modelscope.utils.logger import get_logger from modelscope.utils.plugins import (filter_plugin_in_whitelist, - register_modelhub_repo, + is_trusted_group, register_modelhub_repo, register_plugins_repo) from modelscope.utils.registry import Registry, build_from_cfg from modelscope.utils.task_utils import is_embedding_task @@ -117,6 +117,9 @@ def pipeline(task: str = None, if task is None and pipeline_name is None: raise ValueError('task or pipeline_name is required') + model_id = model[0] if isinstance(model, + list) and len(model) > 0 else model + trust_remote_code = trust_remote_code or is_trusted_group(model_id) pipeline_props = None if pipeline_name is None: # get default pipeline for this task diff --git a/modelscope/preprocessors/base.py b/modelscope/preprocessors/base.py index d3138a3e..f87cebe7 100644 --- a/modelscope/preprocessors/base.py +++ b/modelscope/preprocessors/base.py @@ -208,6 +208,7 @@ class Preprocessor(ABC): revision: Optional[str] = DEFAULT_MODEL_REVISION, cfg_dict: Config = None, preprocessor_mode=ModeKeys.INFERENCE, + trust_remote_code=False, **kwargs): """Instantiate a preprocessor from local directory or remote model repo. Note that when loading from remote, the model revision can be specified. diff --git a/modelscope/trainers/builder.py b/modelscope/trainers/builder.py index 2a04343c..723b6247 100644 --- a/modelscope/trainers/builder.py +++ b/modelscope/trainers/builder.py @@ -5,7 +5,7 @@ from modelscope.pipelines.util import is_official_hub_path from modelscope.utils.constant import DEFAULT_MODEL_REVISION from modelscope.utils.hub import read_config from modelscope.utils.plugins import (filter_plugin_in_whitelist, - register_modelhub_repo, + is_trusted_group, register_modelhub_repo, register_plugins_repo) from modelscope.utils.registry import Registry, build_from_cfg @@ -27,7 +27,10 @@ def build_trainer(name: str = Trainers.default, default_args: dict = None): default_args = default_args or {} model = default_args.get('model', None) model_revision = default_args.get('model_revision', DEFAULT_MODEL_REVISION) - trust_remote_code = default_args.get('trust_remote_code', False) + model_id = model[0] if isinstance(model, + list) and len(model) > 0 else model + trust_remote_code = default_args.get('trust_remote_code', + False) or is_trusted_group(model_id) if isinstance(model, str) \ or (isinstance(model, list) and isinstance(model[0], str)): diff --git a/modelscope/utils/plugins.py b/modelscope/utils/plugins.py index fa4cb877..9ebb1215 100644 --- a/modelscope/utils/plugins.py +++ b/modelscope/utils/plugins.py @@ -61,6 +61,17 @@ def filter_plugin_in_whitelist(plugins): ] +def is_trusted_group(model_id: Optional[str] = None) -> bool: + if not isinstance(model_id, str) or os.path.exists(model_id): + return False + pattern = re.compile(r'^([^/]+)/[^/]+$') + m = pattern.match(model_id) + if not m: + return False + group = m.group(1) + return group in ['iic', 'damo', 'modelscope'] + + @contextmanager def pushd(new_dir: str, verbose: bool = False): """