Spaces:
Running
Running
Download scripts/download_model.py from SmartDataAlex/Jupyter: direct link, hf CLI and curl.
- Browser
- Download file 2.88 kB
-
https://huggingface.co/spaces/SmartDataAlex/Jupyter/resolve/main/scripts/download_model.py
- Command line
-
hf download hf://spaces/SmartDataAlex/Jupyter/scripts/download_model.py
-
curl -L -o download_model.py https://huggingface.co/spaces/SmartDataAlex/Jupyter/resolve/main/scripts/download_model.py
2.88 kB
| """Pin/download checkpoints and adapt Transformers 5 tokenizer metadata to v4.""" | |
| import os | |
| import json | |
| from pathlib import Path | |
| from huggingface_hub import snapshot_download | |
| SPECS = [ | |
| ("intfloat/multilingual-e5-small", | |
| "fd1525a9fd15316a2d503bf26ab031a61d056e98", | |
| "E5_MODEL_DIR", "/opt/models/multilingual-e5-small"), | |
| ("Qwen/Qwen3-Embedding-0.6B", | |
| "97b0c614be4d77ee51c0cef4e5f07c00f9eb65b3", | |
| "QWEN_MODEL_DIR", "/opt/models/qwen3-embedding-0.6b"), | |
| ("lightonai/mLateOn", | |
| "edd378f", | |
| "COLBERT_MODEL_DIR", "/opt/models/mlateon"), | |
| ("BAAI/bge-m3", | |
| "5617a9f", | |
| "BGE_M3_MODEL_DIR", "/opt/models/bge-m3"), | |
| ] | |
| def adapt_mlateon_tokenizer(model_dir: str | Path) -> None: | |
| """Transformers v5 calls the generic fast tokenizer TokenizersBackend; | |
| Transformers v4 calls it PreTrainedTokenizerFast. All vocabulary and | |
| tokenizer.json bytes stay unchanged. | |
| """ | |
| folder = Path(model_dir) | |
| config_path = folder / "tokenizer_config.json" | |
| config = json.loads(config_path.read_text(encoding="utf-8")) | |
| cls = config.get("tokenizer_class") | |
| if cls != "TokenizersBackend": | |
| raise RuntimeError(f"Unexpected mLateOn tokenizer_class {cls!r}") | |
| if not (folder / "tokenizer.json").is_file(): | |
| raise RuntimeError("mLateOn tokenizer.json not found") | |
| config["tokenizer_class"] = "PreTrainedTokenizerFast" | |
| config_path.write_text( | |
| json.dumps(config, indent=2, ensure_ascii=False) + "\n", | |
| encoding="utf-8", | |
| ) | |
| for repo_id, revision, env_name, default in SPECS: | |
| # BGE-M3 has NO safetensors encoder: pytorch_model.bin and the | |
| # sparse_linear.pt / colbert_linear.pt heads are all mandatory. | |
| ignored = ["*.onnx", "*.h5", "*.msgpack", "*.ot", | |
| "*.md", "*.tflite", "*.gguf"] | |
| if repo_id != "BAAI/bge-m3": | |
| ignored += ["*.bin", "*.pt"] | |
| path = snapshot_download( | |
| repo_id=repo_id, revision=revision, | |
| local_dir=os.getenv(env_name, default), | |
| ignore_patterns=ignored, | |
| ) | |
| if repo_id == "BAAI/bge-m3": | |
| for filename in ("pytorch_model.bin", "sparse_linear.pt", | |
| "colbert_linear.pt"): | |
| if not (Path(path) / filename).is_file(): | |
| raise RuntimeError(f"Missing BGE-M3 tri-head weight: {filename}") | |
| print(f"Downloaded {repo_id}@{revision} to {path}", flush=True) | |
| if repo_id == "lightonai/mLateOn": | |
| adapt_mlateon_tokenizer(path) | |
| # Fail the Docker build before release if the real tokenizer fails. | |
| from transformers import AutoTokenizer | |
| tokenizer = AutoTokenizer.from_pretrained(path, local_files_only=True) | |
| if not tokenizer("Hello שלום привет", truncation=False)["input_ids"]: | |
| raise RuntimeError("mLateOn tokenizer produced no tokens") | |
| print("mLateOn fast-tokenizer build preflight passed", flush=True) | |