| import importlib | |
| import json | |
| import os | |
| from typing import Optional | |
| from huggingface_hub import hf_hub_download | |
| def resolve_component_cls( | |
| pretrained_model_name_or_path: str, | |
| component_name: str, | |
| filename: str = "model_index.json", | |
| revision: Optional[str] = None, | |
| cache_dir: Optional[str] = None, | |
| ): | |
| pretrained_model_name_or_path = str(pretrained_model_name_or_path) | |
| if os.path.exists(str(pretrained_model_name_or_path)) and os.path.isdir(pretrained_model_name_or_path): | |
| index_path = os.path.join(pretrained_model_name_or_path, filename) | |
| else: | |
| index_path = hf_hub_download( | |
| repo_id=pretrained_model_name_or_path, filename=filename, revision=revision, cache_dir=cache_dir | |
| ) | |
| with open(index_path, "r") as f: | |
| model_index_dict = json.load(f) | |
| if component_name not in model_index_dict: | |
| raise ValueError(f"No {component_name} found in the model index dict.") | |
| cls_config = model_index_dict[component_name] | |
| library = importlib.import_module(cls_config[0]) | |
| return getattr(library, cls_config[1]) | |