| import os | |
| import json | |
| import onnxruntime | |
| from huggingface_hub import hf_hub_download | |
| import logging | |
| def load_onnx_model_and_preprocessor(hf_model_id): | |
| model_specific_dir = os.path.join("./models", hf_model_id.replace('/', '_')) | |
| os.makedirs(model_specific_dir, exist_ok=True) | |
| onnx_model_path = hf_hub_download(repo_id=hf_model_id, filename="model_quantized.onnx", subfolder="onnx", local_dir=model_specific_dir, local_dir_use_symlinks=False) | |
| preprocessor_config = {} | |
| try: | |
| preprocessor_config_path = hf_hub_download(repo_id=hf_model_id, filename="preprocessor_config.json", local_dir=model_specific_dir, local_dir_use_symlinks=False) | |
| with open(preprocessor_config_path, 'r') as f: | |
| preprocessor_config = json.load(f) | |
| except Exception as e: | |
| logging.getLogger(__name__).warning(f"Could not download or load preprocessor_config.json for {hf_model_id}: {e}") | |
| model_config = {} | |
| try: | |
| model_config_path = hf_hub_download(repo_id=hf_model_id, filename="config.json", local_dir=model_specific_dir, local_dir_use_symlinks=False) | |
| with open(model_config_path, 'r') as f: | |
| model_config = json.load(f) | |
| except Exception as e: | |
| logging.getLogger(__name__).warning(f"Could not download or load config.json for {hf_model_id}: {e}") | |
| return onnxruntime.InferenceSession(onnx_model_path), preprocessor_config, model_config | |
| def get_onnx_model_from_cache(hf_model_id, _onnx_model_cache, load_func): | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| if hf_model_id not in _onnx_model_cache: | |
| logger.info(f"Loading ONNX model and preprocessor for {hf_model_id}...") | |
| _onnx_model_cache[hf_model_id] = load_func(hf_model_id) | |
| return _onnx_model_cache[hf_model_id] | |