Add vLLM-Omni library info to Hugging Face Hub requests (#5381)

Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com>
Co-authored-by: Hongsheng Liu <liuhongsheng4@huawei.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
authored and GitHub committed 2026-09-08 10:08:38 -06:00
1 parent 7a80b79698
commit fdaf4e31bd
57 files changed
+259 -220

No files matched your search

@@ -1,9 +1,11 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
# ruff: noqa: E402, I001
import argparse
import math
import os
import sys
import types
from pathlib import Path
import pytest
@@ -106,11 +108,9 @@ def test_resolve_seed_tts_root_downloads_only_requested_locale(monkeypatch, tmp_
captured["allow_patterns"] = allow_patterns
return str(downloaded_root)
monkeypatch.setitem(
sys.modules,
"huggingface_hub",
types.SimpleNamespace(snapshot_download=fake_snapshot_download),
)
from vllm_omni.transformers_utils import repo_utils
monkeypatch.setattr(repo_utils.hf_api(), "snapshot_download", fake_snapshot_download)
resolved = resolve_seed_tts_root(
"zhaochenyang20/seed-tts-eval",
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""
Performance benchmark CI runner for diffusion models.
@@ -356,6 +359,8 @@ def _resolve_offline_model(model: str) -> str:
"""
import huggingface_hub
from vllm_omni.transformers_utils.repo_utils import hf_api
if not model or os.path.isdir(model):
return model
@@ -380,9 +385,7 @@ def _resolve_offline_model(model: str) -> str:
if len(parts) >= 3:
repo_id = "/".join(parts[:2])
subfolder = "/".join(parts[2:])
from huggingface_hub import snapshot_download
snapshot_root = snapshot_download(
snapshot_root = hf_api().snapshot_download(
repo_id,
allow_patterns=[f"{subfolder}/**"],
local_files_only=huggingface_hub.constants.HF_HUB_OFFLINE,
@@ -391,9 +394,7 @@ def _resolve_offline_model(model: str) -> str:
if not huggingface_hub.constants.HF_HUB_OFFLINE:
return model
from huggingface_hub import snapshot_download
return snapshot_download(model, local_files_only=True)
return hf_api().snapshot_download(model, local_files_only=True)
class DiffusionServer:
@@ -13,7 +13,6 @@ from unittest.mock import MagicMock
import pytest
import torch
import torch.nn as nn
from huggingface_hub import snapshot_download
from safetensors.torch import save_file
from vllm.config.load import LoadConfig
@@ -32,6 +31,7 @@ from vllm_omni.diffusion.models.helios import HeliosPipeline
from vllm_omni.diffusion.models.host_weight_contract import FinalLayoutModelContract
from vllm_omni.diffusion.registry import initialize_model
from vllm_omni.quantization.component_config import ComponentQuantizationConfig
from vllm_omni.transformers_utils.repo_utils import hf_api
pytestmark = [pytest.mark.core_model, pytest.mark.diffusion, pytest.mark.cpu]
@@ -41,7 +41,7 @@ model_path = "hf-internal-testing/tiny-helios-modular-pipe"
@pytest.fixture(scope="module")
def prefetch_helios_model():
"""Downloads the tiny helios model prior to running a test."""
snapshot_download(model_path)
hf_api().snapshot_download(model_path)
@pytest.fixture(scope="function")
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
import contextlib
@@ -14,10 +14,10 @@ pytestmark = [pytest.mark.core_model, pytest.mark.diffusion, pytest.mark.cpu]
def test_prefetch_subfolders_propagates_revision(monkeypatch):
calls = []
def fake_snapshot_download(**kwargs):
def fake_snapshot_download(self, **kwargs):
calls.append(kwargs)
monkeypatch.setattr(huggingface_hub, "snapshot_download", fake_snapshot_download)
monkeypatch.setattr(huggingface_hub.HfApi, "snapshot_download", fake_snapshot_download)
monkeypatch.setattr(hub_prefetch, "_repo_prefetch_lock", lambda _model: contextlib.nullcontext())
hub_prefetch.prefetch_subfolders(
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from __future__ import annotations
@@ -81,9 +81,8 @@ def test_from_config_loads_local_diffusers_component(tmp_path, monkeypatch: pyte
def test_from_config_downloads_component_from_hf_repo(tmp_path, monkeypatch: pytest.MonkeyPatch) -> None:
import huggingface_hub
from vllm_omni.diffusion.models.cosmos3 import sound_tokenizer
from vllm_omni.transformers_utils import repo_utils
cache_dir = tmp_path / "hf"
_write_component(cache_dir, checkpoint_name=DIFFUSERS_SOUND_TOKENIZER_CHECKPOINT_NAME)
@@ -95,7 +94,7 @@ def test_from_config_downloads_component_from_hf_repo(tmp_path, monkeypatch: pyt
calls.append((repo_id, revision, allow_patterns))
return str(cache_dir)
monkeypatch.setattr(huggingface_hub, "snapshot_download", fake_snapshot_download)
monkeypatch.setattr(repo_utils.hf_api(), "snapshot_download", fake_snapshot_download)
sound_tokenizer.Cosmos3SoundTokenizer.from_config(
SimpleNamespace(
@@ -10,6 +10,7 @@ from dataclasses import replace
from types import SimpleNamespace
from typing import Any
import huggingface_hub
import numpy as np
import pytest
import torch
@@ -302,11 +303,11 @@ def test_ltx_artifact_uses_source_revision_and_hub_fallback(
filename = "ltx-sidecar.safetensors"
calls = []
def fake_download(**kwargs):
def fake_download(self, **kwargs):
calls.append(kwargs)
return "/cache/ltx-sidecar.safetensors"
monkeypatch.setattr(ltx2_components, "hf_hub_download", fake_download)
monkeypatch.setattr(huggingface_hub.HfApi, "hf_hub_download", fake_download)
assert (
resolve_ltx_artifact(
@@ -331,7 +332,9 @@ def test_ltx_artifact_prefers_model_root(tmp_path, monkeypatch):
filename = "ltx-sidecar.safetensors"
expected = tmp_path / filename
expected.write_bytes(b"sidecar")
monkeypatch.setattr(ltx2_components, "hf_hub_download", lambda **_kwargs: pytest.fail("unexpected Hub lookup"))
monkeypatch.setattr(
huggingface_hub.HfApi, "hf_hub_download", lambda *_args, **_kwargs: pytest.fail("unexpected Hub lookup")
)
assert resolve_ltx_artifact(
str(tmp_path),
@@ -345,11 +348,11 @@ def test_ltx_artifact_prefers_model_root(tmp_path, monkeypatch):
def test_ltx_artifact_local_model_missing_sidecar_falls_back_to_hub(tmp_path, monkeypatch):
calls = []
def fake_download(**kwargs):
def fake_download(self, **kwargs):
calls.append(kwargs)
return "/cache/ltx-sidecar.safetensors"
monkeypatch.setattr(ltx2_components, "hf_hub_download", fake_download)
monkeypatch.setattr(huggingface_hub.HfApi, "hf_hub_download", fake_download)
assert (
resolve_ltx_artifact(
@@ -42,10 +42,10 @@ _QUALITY_CONFIG = QualityTestConfig(
def _resolve_fl2va_model_ref() -> str:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
repo_root = Path(
snapshot_download(
hf_api().snapshot_download(
repo_id=_MINIMAX_H3_REPO,
revision=_MINIMAX_H3_REVISION,
allow_patterns=["FL2VA/**"],
@@ -253,13 +253,13 @@ def test_resolve_fl2va_model_ref(tmp_path, monkeypatch):
fl2va_root.mkdir()
(fl2va_root / "model_index.json").write_text("{}", encoding="utf-8")
def fake_snapshot_download(*, repo_id, revision, allow_patterns):
def fake_snapshot_download(self, *, repo_id, revision, allow_patterns):
assert repo_id == _MINIMAX_H3_REPO
assert revision == _MINIMAX_H3_REVISION
assert allow_patterns == ["FL2VA/**"]
return str(tmp_path)
monkeypatch.setattr("huggingface_hub.snapshot_download", fake_snapshot_download)
monkeypatch.setattr("huggingface_hub.HfApi.snapshot_download", fake_snapshot_download)
assert _resolve_fl2va_model_ref() == str(fl2va_root)
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""E2E accuracy guard against a pinned Lightricks LTX pipeline revision.
@@ -22,11 +22,11 @@ from typing import Literal
import numpy as np
import pytest
import torch
from huggingface_hub import hf_hub_download, snapshot_download
from torchmetrics.image import PeakSignalNoiseRatio, StructuralSimilarityIndexMeasure
from tests.e2e.accuracy.helpers import reset_artifact_dir
from tests.helpers.mark import hardware_test
from vllm_omni.transformers_utils.repo_utils import hf_api
OFFICIAL_REPOSITORY = "https://github.com/Lightricks/LTX-2.git"
OFFICIAL_REVISION = "9377758131b1ffde4b7f766804590a6617bf2ab9"
@@ -326,7 +326,7 @@ def _resolve_model(case: LTXAccuracyCase) -> Path:
if revision is None and model_id == case.model_id:
revision = case.model_revision
return Path(
snapshot_download(
hf_api().snapshot_download(
repo_id=model_id,
revision=revision,
allow_patterns=[
@@ -359,7 +359,7 @@ def _resolve_gemma_root(case: LTXAccuracyCase, model: Path) -> Path:
if configured_model and Path(configured_model).is_dir():
return Path(configured_model)
return Path(
snapshot_download(
hf_api().snapshot_download(
repo_id=case.gemma_model_id,
revision=case.gemma_model_revision,
allow_patterns=[
@@ -383,7 +383,7 @@ def _resolve_artifact(artifact: LTXArtifact, model: Path | None = None) -> Path:
if model_path.is_file():
return model_path
return Path(
hf_hub_download(
hf_api().hf_hub_download(
repo_id=artifact.repo_id,
repo_type=None if artifact.repo_type == "model" else artifact.repo_type,
filename=artifact.filename,
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""E2E test that follows the EXACT same flow as
``verl-omni/tests/workers/rollout/rollout_vllm/test_vllm_omni_generate.py``
@@ -35,7 +35,6 @@ from uuid import uuid4
import pytest
import ray
import torch
from huggingface_hub import snapshot_download
from omegaconf import OmegaConf
from transformers import AutoTokenizer
@@ -46,6 +45,7 @@ from tests.e2e.features.helpers.verl_omni_server import (
vLLMOmniHttpServerLocal,
)
from tests.helpers.mark import hardware_test
from vllm_omni.transformers_utils.repo_utils import hf_api
MODEL = "tiny-random/Qwen-Image"
TOKENIZER_MODEL = "Qwen/Qwen2-1.5B-Instruct"
@@ -55,7 +55,7 @@ _MIN_PROMPT_TOKENS = 35
def _resolve_model_path(repo_id: str) -> str:
if os.path.isdir(repo_id):
return repo_id
return snapshot_download(repo_id=repo_id)
return hf_api().snapshot_download(repo_id=repo_id)
@lru_cache(maxsize=1)
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""
Offline E2E smoke test for CosyVoice3 zero-shot reference inference.
@@ -20,7 +20,6 @@ from pathlib import Path
import numpy as np
import pytest
import soundfile as sf
from huggingface_hub import snapshot_download
from vllm.sampling_params import SamplingParams
from tests.helpers.mark import hardware_test
@@ -29,6 +28,7 @@ from tests.helpers.runtime import OmniRunner
from tests.helpers.stage_config import get_deploy_config_path
from vllm_omni.model_executor.models.cosyvoice3.tokenizer import get_qwen_tokenizer
from vllm_omni.transformers_utils.configs.cosyvoice3 import CosyVoice3Config
from vllm_omni.transformers_utils.repo_utils import hf_api
MODEL = "FunAudioLLM/Fun-CosyVoice3-0.5B-2512"
MODEL_DIR_ENV = "VLLM_OMNI_COSYVOICE3_MODEL_DIR"
@@ -58,7 +58,7 @@ def _resolve_model_dir() -> Path:
override = os.environ.get(MODEL_DIR_ENV)
if override:
return Path(override).expanduser().resolve()
return Path(snapshot_download(MODEL, allow_patterns=["*"]))
return Path(hf_api().snapshot_download(MODEL, allow_patterns=["*"]))
def _reference_zero_shot_stage0_sampling(*, text: str) -> SamplingParams:
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""
End-to-end test for MammothModa2 text-to-image generation.
@@ -19,12 +22,12 @@ from pathlib import Path
import pytest
import torch
from huggingface_hub import snapshot_download
from vllm.sampling_params import SamplingParams
from tests.helpers.mark import hardware_test
from tests.helpers.runtime import OmniRunner
from tests.helpers.stage_config import get_deploy_config_path
from vllm_omni.transformers_utils.repo_utils import hf_api
# ---------------------------------------------------------------------------
# Constants
@@ -64,7 +67,7 @@ _PIXEL_SAMPLE_COORDS = [
# Helpers
# ---------------------------------------------------------------------------
def _load_t2i_gen_config(repo_id: str) -> dict:
weights_dir = Path(snapshot_download(repo_id))
weights_dir = Path(hf_api().snapshot_download(repo_id))
cfg_path = weights_dir / "t2i_generation_config.json"
if not cfg_path.exists():
pytest.skip(f"t2i_generation_config.json not found at {cfg_path}")
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""E2E offline inference tests for MOSS-TTS-Realtime (MossTTSRealtime, 1.7B).
Uses the standard omni_runner + pytestmark pattern (one module-scoped engine
@@ -160,12 +160,13 @@ def _build_request(ref_audio_path: str, text: str) -> dict:
Frees the codec model before returning to avoid competing with the
running vllm engine for GPU/CPU memory.
"""
from huggingface_hub import snapshot_download
from transformers import AutoModel, AutoTokenizer
from vllm_omni.transformers_utils.repo_utils import hf_api
# Step 1: locate the realtime processor module in the snapshot.
try:
snap_dir = Path(snapshot_download(repo_id=MODEL))
snap_dir = Path(hf_api().snapshot_download(repo_id=MODEL))
except Exception as exc:
msg = f"Cannot locate snapshot for {MODEL}: {exc}"
if os.environ.get("MOSS_TTS_SKIP_ON_NET_FAIL"):
@@ -12,7 +12,6 @@ from pathlib import Path
from types import SimpleNamespace
import pytest
from huggingface_hub import snapshot_download
from tests.helpers.runtime import OmniServerParams, get_model_prefix
from tests.helpers.stage_config import (
@@ -20,6 +19,7 @@ from tests.helpers.stage_config import (
get_deploy_duplex_max_sessions,
modify_stage_config,
)
from vllm_omni.transformers_utils.repo_utils import hf_api
MODEL = "openbmb/MiniCPM-o-4_5"
DEPLOY_CONFIG_REL = "minicpmo_4_5.yaml"
@@ -111,7 +111,7 @@ def resolve_ref_audio() -> Path:
model_prefix = get_model_prefix()
model_root = Path(model_prefix) / MODEL if model_prefix else Path(MODEL)
if not model_root.is_dir():
model_root = Path(snapshot_download(MODEL, local_files_only=True))
model_root = Path(hf_api().snapshot_download(MODEL, local_files_only=True))
ref_audio = model_root / REF_AUDIO_RELATIVE_PATH
if not ref_audio.is_file():
raise FileNotFoundError(f"MiniCPM-o checkpoint ref audio is missing: {ref_audio}")
+9 -5
View File
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""
Tests for Omni config utils. For stability, these tests should largely be
invariant to the specific attributes of vLLM config except in cases where we
@@ -63,7 +66,7 @@ def test_full_payload_capability_reaches_omni_model_config(monkeypatch):
class ConnectorWorker:
model_runner_cls = ConnectorRunner
worker_module.ConnectorWorker = ConnectorWorker
setattr(worker_module, "ConnectorWorker", ConnectorWorker)
monkeypatch.setitem(sys.modules, worker_module.__name__, worker_module)
monkeypatch.setattr(OmniEngineArgs, "_ensure_omni_models_registered", lambda _self: None)
@@ -95,7 +98,7 @@ def test_stage_without_connector_configuration_accepts_plain_runner(monkeypatch)
class WorkerWithoutConnector:
model_runner_cls = object
worker_module.WorkerWithoutConnector = WorkerWithoutConnector
setattr(worker_module, "WorkerWithoutConnector", WorkerWithoutConnector)
monkeypatch.setitem(sys.modules, worker_module.__name__, worker_module)
args = OmniEngineArgs(
@@ -113,7 +116,7 @@ def test_full_payload_capability_requires_selected_worker_connector(monkeypatch)
class WorkerWithoutConnector:
model_runner_cls = object
worker_module.WorkerWithoutConnector = WorkerWithoutConnector
setattr(worker_module, "WorkerWithoutConnector", WorkerWithoutConnector)
monkeypatch.setitem(sys.modules, worker_module.__name__, worker_module)
with pytest.raises(ValueError, match="does not provide an Omni connector model runner"):
@@ -130,7 +133,7 @@ def test_full_payload_capability_validates_platform_selected_worker(monkeypatch)
class WorkerWithoutConnector:
model_runner_cls = object
worker_module.WorkerWithoutConnector = WorkerWithoutConnector
setattr(worker_module, "WorkerWithoutConnector", WorkerWithoutConnector)
monkeypatch.setitem(sys.modules, worker_module.__name__, worker_module)
monkeypatch.setattr(
current_omni_platform,
@@ -293,7 +296,7 @@ def test_remote_tokenizer_subfolder_download_does_not_report_failure(tmp_path, m
baseline_config = Mock()
warning = mocker.patch("vllm_omni.engine.arg_utils.logger.warning")
monkeypatch.setattr("huggingface_hub.snapshot_download", lambda *args, **kwargs: str(tmp_path))
monkeypatch.setattr("huggingface_hub.HfApi.snapshot_download", lambda *args, **kwargs: str(tmp_path))
monkeypatch.setattr(OmniEngineArgs, "_patch_empty_hf_config", lambda *args, **kwargs: None)
monkeypatch.setattr(EngineArgs, "create_model_config", lambda _self: baseline_config)
monkeypatch.setattr(
@@ -339,6 +342,7 @@ def test_patch_missing_local_hf_config(tmp_path):
def test_non_missing_local_hf_config_error_reaches_parent_loader(tmp_path, monkeypatch, config_entry):
"""Non-missing config errors must reach vLLM's normal loader."""
config_path = tmp_path / "config.json"
loader_error: Exception
if config_entry == "malformed":
config_path.write_text("{not valid json", encoding="utf-8")
loader_error = json.JSONDecodeError("invalid config", "{not valid json", 1)
+3 -2
View File
@@ -29,12 +29,13 @@ def skip_if_gated_repo_inaccessible(
and we skip cleanly.
"""
try:
from huggingface_hub import hf_hub_download
from huggingface_hub.errors import GatedRepoError, RepositoryNotFoundError
from vllm_omni.transformers_utils.repo_utils import hf_api
except Exception:
return
try:
hf_hub_download(repo_id=repo_id, filename=filename, revision=revision)
hf_api().hf_hub_download(repo_id=repo_id, filename=filename, revision=revision)
except GatedRepoError as exc:
import pytest
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Unit tests for MiniCPM-o 4.5 code2wav model-dir resolution (#5442).
In hub/CI deployments ``model_config.model`` is a repo id rather than a local
@@ -27,7 +27,7 @@ def _no_hub(monkeypatch):
def _fail(*args, **kwargs): # pragma: no cover - must not be reached
raise AssertionError("snapshot_download must not be called here")
monkeypatch.setattr(huggingface_hub, "snapshot_download", _fail)
monkeypatch.setattr(huggingface_hub.HfApi, "snapshot_download", _fail)
def test_local_directory_is_returned_unchanged(tmp_path, monkeypatch):
@@ -38,13 +38,13 @@ def test_local_directory_is_returned_unchanged(tmp_path, monkeypatch):
def test_repo_id_resolves_via_snapshot_download(tmp_path, monkeypatch):
calls = {}
def _fake_snapshot_download(model_ref, revision=None, allow_patterns=None):
def _fake_snapshot_download(self, model_ref, revision=None, allow_patterns=None):
calls["model_ref"] = model_ref
calls["revision"] = revision
calls["allow_patterns"] = allow_patterns
return str(tmp_path / "snapshot")
monkeypatch.setattr(huggingface_hub, "snapshot_download", _fake_snapshot_download)
monkeypatch.setattr(huggingface_hub.HfApi, "snapshot_download", _fake_snapshot_download)
resolved = _resolve_model_dir("openbmb/MiniCPM-o-4_5", revision="abc123")
assert resolved == str(tmp_path / "snapshot")
assert calls["model_ref"] == "openbmb/MiniCPM-o-4_5"
@@ -56,7 +56,7 @@ def test_snapshot_download_failure_propagates(monkeypatch):
def _raise(*args, **kwargs):
raise FileNotFoundError("offline and not cached")
monkeypatch.setattr(huggingface_hub, "snapshot_download", _raise)
monkeypatch.setattr(huggingface_hub.HfApi, "snapshot_download", _raise)
with pytest.raises(FileNotFoundError):
_resolve_model_dir("openbmb/MiniCPM-o-4_5")
@@ -1,12 +1,15 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from __future__ import annotations
import pytest
from huggingface_hub import hf_hub_download
from tokenizers import Tokenizer as HFTokenizer
from vllm_omni.diffusion.models.omnivoice.pipeline_omnivoice import (
_tokenize_with_nonverbal_tags,
)
from vllm_omni.transformers_utils.repo_utils import hf_api
pytestmark = [pytest.mark.core_model, pytest.mark.cpu]
@@ -18,7 +21,7 @@ def _ids(tok: HFTokenizer, s: str) -> list[int]:
class TestNonVerbalTags:
@classmethod
def setup_class(cls):
tokenizer_path = hf_hub_download(repo_id="k2-fsa/OmniVoice", filename="tokenizer.json")
tokenizer_path = hf_api().hf_hub_download(repo_id="k2-fsa/OmniVoice", filename="tokenizer.json")
cls.tokenizer = HFTokenizer.from_file(tokenizer_path)
def test_plain_text_fallback(self):
+10 -44
View File
@@ -17,7 +17,7 @@ import regex as re
_HF_NAMES = (
r"HfApi|HfFileSystem|hf_hub_download|snapshot_download"
r"|list_repo_files|file_exists|try_to_load_from_cache"
r"|list_repo_refs|repo_exists"
r"|list_repo_refs|repo_exists|get_safetensors_metadata"
)
# Non-library trees: examples, tests, and tooling may keep stdlib imports.
@@ -169,56 +169,20 @@ CHECK_IMPORTS = {
r"^\s*from\s+huggingface_hub\s+import\b[^\n]*\b(?:" + _HF_NAMES + r")\b"
),
tip=(
"Use the shared, vLLM-tagged helpers from "
"vllm.transformers_utils.repo_utils (e.g. hf_api(), hf_fs(), "
"list_repo_files, file_exists) instead of calling "
"huggingface_hub directly."
"Use 'hf_api()' from 'vllm_omni.transformers_utils.repo_utils' (or "
"add a tagged helper there) instead, so requests are tagged with "
"vLLM-Omni's library info."
),
allowed_dirs=_NON_LIBRARY_DIRS,
allowed_files={
"vllm_omni/benchmarks/data_modules/daily_omni_dataset.py",
"vllm_omni/benchmarks/data_modules/seed_tts_dataset.py",
"vllm_omni/benchmarks/data_modules/seed_tts_eval.py",
"vllm_omni/diffusion/lora/loader.py",
"vllm_omni/diffusion/model_loader/hub_prefetch.py",
"vllm_omni/diffusion/models/cosmos3/sound_tokenizer.py",
"vllm_omni/diffusion/models/dreamzero/pipeline_dreamzero.py",
"vllm_omni/diffusion/models/helios/pipeline_helios.py",
"vllm_omni/diffusion/models/longcat_video/pipeline_longcat_video_avatar.py",
"vllm_omni/diffusion/models/ltx2/ltx2_components.py",
"vllm_omni/diffusion/models/magi_human/pipeline_magi_human.py",
"vllm_omni/diffusion/models/omnivoice/pipeline_omnivoice.py",
"vllm_omni/diffusion/models/pi0/pipeline_pi0.py",
"vllm_omni/diffusion/models/sensenova_u1/pipeline_sensenova_u1.py",
"vllm_omni/diffusion/models/soulx_singer/utils.py",
"vllm_omni/diffusion/models/utils.py",
"vllm_omni/diffusion/models/wan2_2/pipeline_wan2_2.py",
"vllm_omni/engine/arg_utils.py",
"vllm_omni/entrypoints/openai/api_server.py",
"vllm_omni/entrypoints/openai/serving_speech.py",
"vllm_omni/entrypoints/openai/tts_adapters/cosyvoice3.py",
"vllm_omni/model_executor/model_loader/weight_utils.py",
"vllm_omni/model_executor/models/audex/checkpoint.py",
"vllm_omni/model_executor/models/bagel/bagel.py",
"vllm_omni/model_executor/models/cosyvoice3/cosyvoice3.py",
"vllm_omni/model_executor/models/covo_audio/covo_audio_code2wav.py",
"vllm_omni/model_executor/models/dots_tts/dots_tts_talker.py",
"vllm_omni/model_executor/models/dynin_omni/dynin_omni_common.py",
"vllm_omni/model_executor/models/dynin_omni/dynin_omni_token2audio.py",
"vllm_omni/model_executor/models/glm_tts/glm_tts.py",
# ``try_to_load_from_cache`` is a local cache lookup that issues no
# Hub request, so there is nothing for ``hf_api()`` to tag.
"vllm_omni/model_executor/models/higgs_audio_v2/higgs_audio_v2_code2wav.py",
"vllm_omni/model_executor/models/higgs_audio_v2/higgs_audio_v2_tokenizer.py",
"vllm_omni/model_executor/models/higgs_audio_v3/higgs_audio_v3_code2wav.py",
"vllm_omni/model_executor/models/indextts2/preprocess_utils.py",
"vllm_omni/model_executor/models/indextts2/s2mel/modules/bigvgan.py",
"vllm_omni/model_executor/models/indextts2/tokenizer_v2_5.py",
"vllm_omni/model_executor/models/ming_tts/speaker_extractor.py",
"vllm_omni/model_executor/models/minicpmo_4_5/minicpmo_4_5_code2wav.py",
"vllm_omni/model_executor/models/omnivoice/omnivoice.py",
"vllm_omni/model_executor/models/personaplex/personaplex_mimi.py",
"vllm_omni/model_executor/models/step_audio2/step_audio2_token2wav.py",
"vllm_omni/model_executor/models/voxtral_tts/voxtral_tts.py",
"vllm_omni/transformers_utils/configs/higgs_audio_v3.py",
# Defines the tagged helper itself.
"vllm_omni/transformers_utils/repo_utils.py",
},
),
}
@@ -330,6 +294,7 @@ def test_regex():
("from huggingface_hub import HfFileSystem", True),
("from huggingface_hub import list_repo_files", True),
("from huggingface_hub import try_to_load_from_cache", True),
("from huggingface_hub import get_safetensors_metadata", True),
(" from huggingface_hub import snapshot_download", True),
("from huggingface_hub import PyTorchModelHubMixin, hf_hub_download", True),
("from huggingface_hub import (snapshot_download)", True),
@@ -346,6 +311,7 @@ def test_regex():
("from huggingface_hub.constants import HF_HUB_CACHE", False),
("from huggingface_hub.utils import EntryNotFoundError", False),
("from vllm.transformers_utils.repo_utils import hf_api", False),
("from vllm_omni.transformers_utils.repo_utils import hf_api", False),
("from huggingface_hub import (\n PyTorchModelHubMixin,\n)", False),
("# from huggingface_hub import snapshot_download", False),
]
@@ -170,7 +170,7 @@ def ensure_daily_omni_hub_videos_dir(repo_id: str) -> Path:
raise ValueError("repo_id is required to download Daily-Omni Videos.tar")
try:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
except ImportError as e:
raise ImportError(
"Daily-Omni Hub media download requires huggingface_hub. "
@@ -180,7 +180,7 @@ def ensure_daily_omni_hub_videos_dir(repo_id: str) -> Path:
tar_path: Path | None = None
for fname in ("Videos.tar", "videos.tar"):
try:
tar_path = Path(hf_hub_download(repo_id=rid, filename=fname, repo_type="dataset"))
tar_path = Path(hf_api().hf_hub_download(repo_id=rid, filename=fname, repo_type="dataset"))
break
except Exception:
continue
@@ -237,14 +237,14 @@ def ensure_daily_omni_hub_root(repo_id: str) -> Path:
raise ValueError("repo_id is required to download Daily-Omni from Hugging Face")
try:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
except ImportError as e:
raise ImportError(
"Install huggingface_hub to load Daily-Omni from the Hub, or pass a local "
"--daily-omni-qa-json / --daily-omni-video-dir mirror."
) from e
cache = snapshot_download(
cache = hf_api().snapshot_download(
repo_id=rid,
repo_type="dataset",
allow_patterns=_DAILY_OMNI_QA_ALLOW_PATTERNS,
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Seed-TTS zero-shot evaluation-style prompts for ``vllm bench serve``.
Loads rows from the `meta.lst` format used in `BytedanceSpeech/seed-tts-eval`_ (or any
@@ -121,7 +124,7 @@ def resolve_seed_tts_root(dataset_path: str | None, *, explicit_root: str | None
repo_id = dataset_path.strip()
try:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
except ImportError as e:
raise ImportError(
"Install huggingface_hub to download Seed-TTS from the Hub, or clone the dataset "
@@ -130,7 +133,7 @@ def resolve_seed_tts_root(dataset_path: str | None, *, explicit_root: str | None
# Download only the requested locale subtree instead of the whole dataset
# repo. This avoids large, flaky nightly downloads when we only need e.g.
# ``en/meta.lst`` + ``en/prompt-wavs/**``.
cache = snapshot_download(
cache = hf_api().snapshot_download(
repo_id=repo_id,
repo_type="dataset",
allow_patterns=[f"{locale}/**"],
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Seed-TTS WER aligned with Bytedance ``seed-tts-eval`` / ``run_wer.py``.
Matches the published protocol (see Hugging Face dataset card and
@@ -329,7 +332,8 @@ def _ensure_utmos_jit_model() -> Any | None:
return _utmos_jit_model
try:
import torch
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
repo = os.environ.get("SEED_TTS_UTMOS_HF_REPO", "balacoon/utmos").strip() or "balacoon/utmos"
fname = os.environ.get("SEED_TTS_UTMOS_JIT_FILE", "utmos.jit").strip() or "utmos.jit"
@@ -338,7 +342,7 @@ def _ensure_utmos_jit_model() -> Any | None:
repo,
fname,
)
path = hf_hub_download(repo_id=repo, filename=fname, repo_type="model")
path = hf_api().hf_hub_download(repo_id=repo, filename=fname, repo_type="model")
# TODO The model weights in UTMOS must be loaded in cuda:0; otherwise, the model execution will fail.
want = "cuda:0"
+2 -2
View File
@@ -10,11 +10,11 @@ from diffusers.loaders.lora_conversion_utils import (
_convert_non_diffusers_qwen_lora_to_diffusers,
_convert_non_diffusers_wan_lora_to_diffusers,
)
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from vllm.logger import init_logger
from vllm_omni.diffusion.utils.tf_utils import get_transformer_from_pipeline
from vllm_omni.transformers_utils.repo_utils import hf_api
logger = init_logger(__name__)
@@ -131,7 +131,7 @@ def _load_lora_state_dict(
# finally, we try to load it from the internet
try:
model_file = hf_hub_download(
model_file = hf_api().hf_hub_download(
pretrained_model_name_or_path,
filename=weights_name,
subfolder=subfolder,
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Best-effort HuggingFace Hub prefetch for multi-subfolder pipelines.
@@ -297,7 +297,7 @@ def prefetch_subfolders(
logger.info("Prefetching %s subfolders: %s", model, subfolders)
try:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
except ImportError: # pragma: no cover - huggingface_hub is a hard dep
logger.debug("huggingface_hub unavailable; skipping prefetch of %s", model)
return
@@ -334,7 +334,7 @@ def prefetch_subfolders(
for attempt in range(1, _PREFETCH_MAX_ATTEMPTS + 1):
try:
with _repo_prefetch_lock(model):
snapshot_download(
hf_api().snapshot_download(
repo_id=model,
revision=revision,
allow_patterns=allow_patterns,
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Cosmos3 sound tokenizer integration.
The tokenizer decodes model-generated sound latents for video+audio output. It
@@ -338,9 +338,9 @@ class Cosmos3SoundTokenizer:
model_root = str(model_path) if model_path and os.path.isdir(model_path) else None
if model_root is None and model_path and not explicit_avae_path:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
model_root = snapshot_download(
model_root = hf_api().snapshot_download(
repo_id=str(model_path),
revision=getattr(od_config, "revision", None),
allow_patterns=[
@@ -21,7 +21,6 @@ from contextlib import contextmanager
import numpy as np
import torch
import torch.nn as nn
from huggingface_hub import hf_hub_download
from transformers import AutoTokenizer, UMT5Config, UMT5EncoderModel
from vllm.model_executor.model_loader.weight_utils import default_weight_loader
@@ -67,6 +66,7 @@ from vllm_omni.experimental.world_models.session_state import (
resolve_session_state_config,
)
from vllm_omni.inputs.data import OmniDiffusionSamplingParams
from vllm_omni.transformers_utils.repo_utils import hf_api
logger = logging.getLogger(__name__)
MAX_DREAMZERO_SESSIONS = 64
@@ -581,7 +581,7 @@ class DreamZeroPipeline(nn.Module, CFGParallelMixin):
return json.load(f)
try:
json_path = hf_hub_download(model_path, relative_path)
json_path = hf_api().hf_hub_download(model_path, relative_path)
with open(json_path) as f:
return json.load(f)
except Exception:
@@ -76,9 +76,9 @@ def load_json_config(model_path: str, subfolder: str, filename: str, local_files
return json.load(f)
else:
try:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
config_path = hf_hub_download(
config_path = hf_api().hf_hub_download(
repo_id=model_path,
filename=f"{subfolder}/{filename}",
)
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from __future__ import annotations
@@ -376,9 +376,9 @@ def _ensure_local_dir(model: str | os.PathLike[str], allow_patterns: list[str] |
model_path = Path(model)
if model_path.exists():
return model_path
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return Path(snapshot_download(str(model), allow_patterns=allow_patterns))
return Path(hf_api().snapshot_download(str(model), allow_patterns=allow_patterns))
def _ensure_avatar_model_index(model_dir: Path, use_int8: bool) -> None:
@@ -20,7 +20,6 @@ from diffusers.pipelines.ltx2 import LTX2TextConnectors
from diffusers.pipelines.ltx2.latent_upsampler import LTX2LatentUpsamplerModel
from diffusers.pipelines.ltx2.vocoder import LTX2Vocoder
from diffusers.video_processor import VideoProcessor
from huggingface_hub import hf_hub_download
from safetensors import safe_open
from safetensors.torch import load_file
from transformers import AutoModelForImageTextToText, AutoTokenizer, Gemma3ForConditionalGeneration
@@ -32,6 +31,7 @@ from vllm_omni.diffusion.distributed.utils import get_local_device
from vllm_omni.diffusion.model_loader.diffusers_loader import DiffusersPipelineLoader
from vllm_omni.diffusion.model_loader.hub_prefetch import from_pretrained_with_prefetch, prefetch_subfolders
from vllm_omni.diffusion.offloader.module_collector import ModuleDiscovery
from vllm_omni.transformers_utils.repo_utils import hf_api
if TYPE_CHECKING:
from vllm.model_executor.layers.quantization.base_config import QuantizationConfig
@@ -279,7 +279,7 @@ def resolve_ltx_artifact(
# independently pinned artifact revision.
revision = model_revision if model == repo_id else artifact_revision
try:
return hf_hub_download(
return hf_api().hf_hub_download(
repo_id=repo_id,
filename=filename,
revision=revision,
@@ -351,7 +351,7 @@ def _load_ltx_metadata_json(model: str, filename: str, revision: str | None = No
return {}
else:
try:
path = hf_hub_download(repo_id=model, filename=filename, revision=revision)
path = hf_api().hf_hub_download(repo_id=model, filename=filename, revision=revision)
except Exception:
return {}
try:
@@ -529,7 +529,7 @@ def _detect_vocoder_output_sample_rate(model: str, revision: str | None = None)
vocoder_config_path = os.path.join(model, "vocoder", "config.json")
if not os.path.exists(vocoder_config_path):
try:
vocoder_config_path = hf_hub_download(model, "vocoder/config.json", revision=revision)
vocoder_config_path = hf_api().hf_hub_download(model, "vocoder/config.json", revision=revision)
except Exception:
return None
try:
@@ -839,7 +839,7 @@ def load_transformer_config(
if not os.path.exists(config_path):
raise FileNotFoundError(f"LTX transformer config not found: {config_path}")
else:
config_path = hf_hub_download(
config_path = hf_api().hf_hub_download(
repo_id=model_path,
filename=f"{subfolder}/config.json",
revision=revision,
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""
OmniVoice TTS Pipeline for vLLM-Omni diffusion engine.
@@ -141,9 +141,9 @@ class OmniVoicePipeline(nn.Module, SupportAudioOutput):
# Resolve model path (HF hub ID → local cache)
if not os.path.isdir(self.model_path):
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
self.model_path = snapshot_download(self.model_path)
self.model_path = hf_api().snapshot_download(self.model_path)
# Load OmniVoice config
config_path = os.path.join(self.model_path, "config.json")
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""π0 (Pi-Zero) VLA pipeline for vllm-omni.
Entry point for ``DiffusionEngine.step() → pipeline.forward(req)``. Mirrors the
@@ -94,9 +94,9 @@ class Pi0Pipeline(nn.Module):
return None
if os.path.isdir(model):
return model
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return snapshot_download(
return hf_api().snapshot_download(
repo_id=model,
allow_patterns=["*.json", "*.safetensors", "*.model", "tokenizer*"],
)
@@ -27,7 +27,6 @@ import numpy as np
import torch
import torch.nn as nn
import torchvision.transforms as T
from huggingface_hub import snapshot_download
from PIL import Image
from transformers import AutoTokenizer
from vllm.logger import init_logger
@@ -109,7 +108,9 @@ def _resolve_model_path(model_path: str) -> str:
"""Resolve a HuggingFace model ID or local path to a local directory."""
if os.path.isdir(model_path):
return model_path
return snapshot_download(model_path)
from vllm_omni.transformers_utils.repo_utils import hf_api
return hf_api().snapshot_download(model_path)
def _round_by_factor(number: float, factor: int) -> int:
+2 -2
View File
@@ -168,8 +168,8 @@ def _load_json(model_path: str, filename: str, local_files_only: bool = True) ->
with open(path) as f:
return json.load(f)
else:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
cached = hf_hub_download(repo_id=model_path, filename=filename)
cached = hf_api().hf_hub_download(repo_id=model_path, filename=filename)
with open(cached) as f:
return json.load(f)
@@ -156,9 +156,9 @@ def load_transformer_config(model_path: str, subfolder: str = "transformer", loc
else:
# Try to download config from HF Hub
try:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
config_path = hf_hub_download(
config_path = hf_api().hf_hub_download(
repo_id=model_path,
filename=f"{subfolder}/config.json",
)
@@ -364,9 +364,9 @@ class Wan22Pipeline(
else:
# For remote models, download and read model_index.json
try:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
model_index_path = hf_hub_download(repo_id=model, filename="model_index.json")
model_index_path = hf_api().hf_hub_download(repo_id=model, filename="model_index.json")
with open(model_index_path) as f:
model_index = json.load(f)
self.expand_timesteps = model_index.get("expand_timesteps", False)
+2 -2
View File
@@ -381,9 +381,9 @@ class OmniEngineArgs(EngineArgs):
if tokenizer_subfolder:
# Download just the tokenizer files from the subfolder
try:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
local_dir = snapshot_download(
local_dir = hf_api().snapshot_download(
model_path,
allow_patterns=[
f"{tokenizer_subfolder}/tokenizer*",
+1 -1
View File
@@ -31,7 +31,6 @@ from vllm.pooling_params import PoolingParams
from vllm.renderers import BaseRenderer
from vllm.sampling_params import SamplingParams
from vllm.tokenizers import cached_tokenizer_from_config
from vllm.transformers_utils.repo_utils import hf_api
from vllm.transformers_utils.runai_utils import is_runai_obj_uri
from vllm.usage.usage_lib import UsageContext
from vllm.v1.engine.input_processor import InputProcessor
@@ -59,6 +58,7 @@ from vllm_omni.inputs.preprocess import OmniInputPreprocessor
from vllm_omni.outputs.output_processor import MultimodalOutputProcessor
from vllm_omni.platforms import current_omni_platform
from vllm_omni.quantization.inc_config import OmniINCConfig
from vllm_omni.transformers_utils.repo_utils import hf_api
logger = init_logger(__name__)
+2 -2
View File
@@ -201,9 +201,9 @@ def _load_model_chat_template_json(model: str) -> str | None:
if template_path is None:
try:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
template_path = hf_hub_download(
template_path = hf_api().hf_hub_download(
repo_id=model,
filename="chat_template.json",
local_files_only=True,
@@ -116,9 +116,9 @@ class CosyVoice3Adapter(ARTTSAdapter):
if tokenizer is None:
model_path = server.engine_client.model_config.model
if not os.path.isdir(model_path):
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
model_path = snapshot_download(model_path)
model_path = hf_api().snapshot_download(model_path)
tokenizer = get_qwen_tokenizer(
token_path=os.path.join(model_path, hf_cfg.qwen_pretrain_path),
skip_special_tokens=hf_cfg.skip_special_tokens,
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
import os
import time
from pathlib import Path
@@ -10,7 +13,11 @@ from vllm.model_executor.model_loader.weight_utils import DisabledTqdm, get_lock
if envs.VLLM_USE_MODELSCOPE:
from modelscope.hub.snapshot_download import snapshot_download
else:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
def snapshot_download(*args, **kwargs):
return hf_api().snapshot_download(*args, **kwargs)
logger = init_logger(__name__)
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Audex checkpoint layout preparation.
The nvidia/Nemotron-Labs-Audex-2B repo deduplicates weights: the
@@ -57,12 +57,12 @@ def _download_audiogen_index(model: str) -> str:
metadata round trip per stage-engine boot; a cache miss falls back to
the network.
"""
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
try:
return hf_hub_download(model, _AUDIOGEN_INDEX_FILE, local_files_only=True)
return hf_api().hf_hub_download(model, _AUDIOGEN_INDEX_FILE, local_files_only=True)
except Exception:
return hf_hub_download(model, _AUDIOGEN_INDEX_FILE)
return hf_api().hf_hub_download(model, _AUDIOGEN_INDEX_FILE)
def _dedup_shard_patterns(model: str) -> list[str]:
@@ -111,13 +111,13 @@ def ensure_audex_snapshot(model: str, profile: str = "tts") -> str:
if profile in ("tts", "tta"):
patterns += _dedup_shard_patterns(model)
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
try:
return snapshot_download(model, allow_patterns=patterns)
return hf_api().snapshot_download(model, allow_patterns=patterns)
except Exception as download_exc:
try:
return snapshot_download(model, allow_patterns=patterns, local_files_only=True)
return hf_api().snapshot_download(model, allow_patterns=patterns, local_files_only=True)
except Exception:
raise RuntimeError(
f"Could not resolve the Audex repo {model!r} (profile {profile!r}): the download "
@@ -135,13 +135,13 @@ def ensure_xcodec1_snapshot(model: str | None) -> str:
if os.path.isdir(model):
return model
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
try:
return snapshot_download(model)
return hf_api().snapshot_download(model)
except Exception as download_exc:
try:
return snapshot_download(model, local_files_only=True)
return hf_api().snapshot_download(model, local_files_only=True)
except Exception:
raise RuntimeError(
f"Could not resolve the XCodec1 checkpoint {model!r}: the download failed and "
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from collections.abc import Iterable, Mapping, Sequence
from math import isqrt
from typing import Any
@@ -122,9 +125,9 @@ class OmniBagelProcessingInfo(BaseProcessingInfo):
if p.is_dir():
index_path = p / "model.safetensors.index.json"
else:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
index_path = Path(hf_hub_download(model_name, "model.safetensors.index.json"))
index_path = Path(hf_api().hf_hub_download(model_name, "model.safetensors.index.json"))
if not index_path.exists():
return
@@ -10,7 +10,6 @@ import numpy as np
import onnxruntime
import torch
import torch.nn as nn
from huggingface_hub import snapshot_download
from scipy.signal import resample_poly
from transformers import Qwen2Config
from transformers.feature_extraction_utils import BatchFeature
@@ -52,6 +51,7 @@ from vllm_omni.model_executor.models.cosyvoice3.utils import (
from vllm_omni.model_executor.models.output_templates import OmniOutput
from vllm_omni.platforms import current_omni_platform
from vllm_omni.transformers_utils.configs.cosyvoice3 import CosyVoice3Config
from vllm_omni.transformers_utils.repo_utils import hf_api
from vllm_omni.utils.speaker_cache import get_speaker_cache
logger = init_logger(__name__)
@@ -137,7 +137,7 @@ class CosyVoice3MultiModalProcessor(BaseMultiModalProcessor[CosyVoice3MultiModal
"""Build the per-model runtime components once (cached process-wide)."""
# If model_dir is an HF repo ID (not a local path), resolve to cache.
if not os.path.isdir(model_dir):
model_dir = snapshot_download(model_dir)
model_dir = hf_api().snapshot_download(model_dir)
tokenizer = get_qwen_tokenizer(
token_path=os.path.join(model_dir, config.qwen_pretrain_path),
@@ -463,7 +463,7 @@ class CosyVoice3Model(
self.model_stage = vllm_config.model_config.model_stage
model_dir = vllm_config.model_config.model
if not os.path.isdir(model_dir):
model_dir = snapshot_download(model_dir)
model_dir = hf_api().snapshot_download(model_dir)
self.model_dir = model_dir
self.model = None
if self.model_stage == "cosyvoice3_talker":
@@ -918,7 +918,7 @@ class CosyVoice3Model(
repo = getattr(self.config, "flow_estimator_onnx_repo", None)
if repo:
try:
fetched_dir = snapshot_download(repo, allow_patterns=[fp16_name])
fetched_dir = hf_api().snapshot_download(repo, allow_patterns=[fp16_name])
fetched = os.path.join(fetched_dir, fp16_name)
if os.path.exists(fetched):
return fetched
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
# Copyright 2026 Tencent.
import os
from collections.abc import Iterable
@@ -25,9 +28,9 @@ class CovoAudioCode2WavForConditionalGeneration(nn.Module, SupportsPP):
if os.path.isdir(model_name):
model_path = model_name
else:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
model_path = snapshot_download(model_name)
model_path = hf_api().snapshot_download(model_name)
token2wav_path = os.path.join(model_path, "token2wav")
code2wav_config = CovoAudioCode2WavConfig()
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""dots.tts talker — vLLM-native AR base LM + audio side path.
Mirrors upstream rednote-hilab/dots.tts (pinned @ a393d2e):
@@ -516,9 +516,9 @@ class DotsTTSForConditionalGeneration(nn.Module):
if os.path.exists(local):
return local
try:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return hf_hub_download(
return hf_api().hf_hub_download(
repo_id=model_arg,
filename="latent_stats.pt",
local_files_only=True,
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from __future__ import annotations
import hashlib
@@ -20,9 +23,9 @@ from vllm.logger import init_logger
logger = init_logger(__name__)
try:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
except Exception: # pragma: no cover
snapshot_download = None
hf_api = None
class DetokTarget(IntEnum):
@@ -397,13 +400,13 @@ def _find_dynin_config_under_root(root: Path) -> Path | None:
@lru_cache(maxsize=16)
def _resolve_dynin_config_from_hf_repo(repo_id: str) -> str | None:
if not _looks_like_hf_repo_id(repo_id) or snapshot_download is None:
if not _looks_like_hf_repo_id(repo_id) or hf_api is None:
return None
try:
snapshot_dir = (
Path(
snapshot_download(
hf_api().snapshot_download(
repo_id=repo_id,
repo_type="model",
allow_patterns=list(_DYNIN_CONFIG_CANDIDATE_RELPATHS),
@@ -719,7 +722,7 @@ def _resolve_remote_snapshot_dir(
if source_path.is_dir():
return str(source_path.resolve())
if snapshot_download is None:
if hf_api is None:
raise RuntimeError("huggingface_hub is required to load remote code.")
kwargs: dict[str, Any] = {
@@ -732,10 +735,10 @@ def _resolve_remote_snapshot_dir(
kwargs["revision"] = revision
try:
return str(snapshot_download(**kwargs))
return str(hf_api().snapshot_download(**kwargs))
except TypeError:
kwargs.pop("local_files_only", None)
return str(snapshot_download(**kwargs))
return str(hf_api().snapshot_download(**kwargs))
def _ensure_remote_package(snapshot_dir: str) -> str:
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from __future__ import annotations
import os
@@ -80,7 +83,7 @@ def _ensure_remote_s2u_vendor_root(
return str(existing_path)
try:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
except Exception as e:
logger.warning("huggingface_hub unavailable; cannot fetch s2u_vendor from %s: %s", repo_id, e)
return None
@@ -91,7 +94,7 @@ def _ensure_remote_s2u_vendor_root(
for revision in revisions:
try:
snapshot_dir = snapshot_download(
snapshot_dir = hf_api().snapshot_download(
repo_id=repo_id,
revision=revision,
allow_patterns=["s2u_vendor/**"],
@@ -99,7 +102,7 @@ def _ensure_remote_s2u_vendor_root(
)
except TypeError:
try:
snapshot_dir = snapshot_download(
snapshot_dir = hf_api().snapshot_download(
repo_id=repo_id,
revision=revision,
allow_patterns=["s2u_vendor/**"],
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""GLM-TTS AR Model (Stage 0): Text → Speech Tokens.
Based on Llama architecture, generates speech token sequences from input text.
@@ -113,9 +113,9 @@ def resolve_glm_tts_tokenizer_path(model_name_or_path: Any) -> str:
return candidate
return model_path
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
local_dir = snapshot_download(
local_dir = hf_api().snapshot_download(
model_path,
allow_patterns=[
f"{_GLM_TTS_TOKENIZER_SUBDIR}/tokenizer*",
@@ -169,9 +169,9 @@ def resolve_glm_tts_model_dir(
except Exception:
pass
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return snapshot_download(model_name_or_path)
return hf_api().snapshot_download(model_name_or_path)
def _first_glm_tts_value(value: Any) -> Any:
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Stage 1 (codec decoder) for higgs-audio v2.
Two surfaces exposed:
@@ -231,9 +231,9 @@ class HiggsAudioV2Code2Wav(nn.Module):
if os.path.isfile(os.path.join(candidate, "config.json")):
return candidate
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return snapshot_download(repo_id=repo_id)
return hf_api().snapshot_download(repo_id=repo_id)
# ------------------------------------------------------ direct decode API
@torch.inference_mode()
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""TTS prompt builder + scope validators for higgs-audio v2.
vllm-omni's higgs path supports two request shapes:
@@ -248,9 +248,9 @@ def _load_audio_tokenizer():
audio_tokenizer_dir = _resolve_audio_tokenizer_dir()
if audio_tokenizer_dir is None:
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
repo_path = snapshot_download(
repo_path = hf_api().snapshot_download(
_K2_OMNIVOICE_REPO,
allow_patterns=[f"{_K2_OMNIVOICE_SUBDIR}/*"],
)
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""External model loading, audio I/O, and emotion conditioning for IndexTTS2."""
from __future__ import annotations
@@ -171,9 +171,10 @@ def load_semantic_codec(
codec.load_state_dict(state, strict=False)
else:
import safetensors.torch
from huggingface_hub import hf_hub_download
ckpt_path = hf_hub_download("amphion/MaskGCT", filename="semantic_codec/model.safetensors")
from vllm_omni.transformers_utils.repo_utils import hf_api
ckpt_path = hf_api().hf_hub_download("amphion/MaskGCT", filename="semantic_codec/model.safetensors")
safetensors.torch.load_model(codec, ckpt_path)
_freeze(codec.to(device=device, dtype=torch.float32))
_semantic_codec_cache[cache_key] = codec
@@ -198,9 +199,11 @@ def load_campplus(model_path: str, device: torch.device):
if ckpt_path is not None:
break
if ckpt_path is None:
from huggingface_hub import hf_hub_download
if os.path.isdir(model_path):
raise FileNotFoundError(f"IndexTTS CAMPPlus checkpoint is missing from local bundle {model_path!r}")
from vllm_omni.transformers_utils.repo_utils import hf_api
ckpt_path = hf_hub_download("funasr/campplus", filename="campplus_cn_common.bin")
ckpt_path = hf_api().hf_hub_download("funasr/campplus", filename="campplus_cn_common.bin")
state = torch.load(ckpt_path, map_location="cpu", weights_only=True)
campplus.load_state_dict(state, strict=False)
_freeze(campplus.to(device=device, dtype=torch.float32))
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
# Copyright (c) 2024 NVIDIA CORPORATION.
# Licensed under the MIT license.
@@ -9,13 +12,14 @@ import os
import torch
import torch.nn as nn
from huggingface_hub import PyTorchModelHubMixin, hf_hub_download
from huggingface_hub import PyTorchModelHubMixin
from torch.nn import Conv1d, ConvTranspose1d
from torch.nn.utils import remove_weight_norm, weight_norm
from vllm_omni.model_executor.models.common.alias_free_activation import AliasFreeActivation1d
from vllm_omni.model_executor.models.common.snake_activation import Snake, SnakeBeta
from vllm_omni.model_executor.models.indextts2.s2mel.modules.commons import AttrDict
from vllm_omni.transformers_utils.repo_utils import hf_api
# ---------------------------------------------------------------------------
# Helpers (inlined from env.py / utils.py)
@@ -328,7 +332,7 @@ class BigVGAN(
def _resolve(filename):
if os.path.isdir(model_id):
return os.path.join(model_id, filename)
return hf_hub_download(
return hf_api().hf_hub_download(
repo_id=model_id,
filename=filename,
**{
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""IndexTTS 2.5 multilingual tiktoken vocabulary.
The vocabulary layout mirrors the official IndexTTS 2.5 tokenizer: 58,836
@@ -234,9 +234,9 @@ def resolve_indextts25_tokenizer_file(
return str(model_path)
try:
from huggingface_hub import hf_hub_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return hf_hub_download(repo_id=model_dir, filename=tokenizer_file)
return hf_api().hf_hub_download(repo_id=model_dir, filename=tokenizer_file)
except Exception as exc:
raise FileNotFoundError(
f"Could not resolve IndexTTS 2.5 tokenizer {tokenizer_file!r} from {model_dir!r}"
@@ -39,9 +39,9 @@ def _resolve_model_dir(model_ref: str, revision: str | None = None) -> str:
"""
if Path(model_ref).is_dir():
return model_ref
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return snapshot_download(model_ref, revision=revision, allow_patterns=["assets/*"])
return hf_api().snapshot_download(model_ref, revision=revision, allow_patterns=["assets/*"])
def _batch_error(reason: str, **details: Any) -> RuntimeError:
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""
OmniVoice model for vLLM-Omni two-stage TTS pipeline.
@@ -487,9 +487,9 @@ class OmniVoiceModel(
if os.path.isdir(model_dir):
return model_dir
# HF hub model ID — resolve to local cache
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
return snapshot_download(model_dir)
return hf_api().snapshot_download(model_dir)
def load_weights(self, weights: Iterable[tuple[str, torch.Tensor]]) -> set[str]:
try:
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Streaming Mimi codec for PersonaPlex (moshi-free).
Frame-clocked duplex needs a codec that encodes/decodes exactly one 80 ms frame
@@ -288,10 +288,11 @@ class PersonaPlexMimiCodec(nn.Module):
def __init__(self, hf_repo: str = DEFAULT_HF_REPO, checkpoint: str | None = None, device: str = "cuda") -> None:
super().__init__()
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import MimiConfig, MimiModel
from vllm_omni.transformers_utils.repo_utils import hf_api
self.device = torch.device(device)
# The PersonaPlex repo ships the reference mimi checkpoint in the moshi
@@ -300,7 +301,7 @@ class PersonaPlexMimiCodec(nn.Module):
# transformer stacks remain absent because the streaming implementations
# below replace them with the checkpoint's fused QKV layout.
if checkpoint is None:
checkpoint = hf_hub_download(
checkpoint = hf_api().hf_hub_download(
"nvidia/personaplex-7b-v1",
"tokenizer-e351c8d8-checkpoint125.safetensors",
)
@@ -461,9 +461,9 @@ class StepAudio2Token2WavForConditionalGeneration(nn.Module, SupportsPP):
if model_path is None:
# Resolve HF repo names to local cache path
if not os.path.isdir(model_name_or_path):
from huggingface_hub import snapshot_download
from vllm_omni.transformers_utils.repo_utils import hf_api
model_name_or_path = snapshot_download(model_name_or_path)
model_name_or_path = hf_api().snapshot_download(model_name_or_path)
model_path = f"{model_name_or_path}/token2wav"
float16 = getattr(self.config, "token2wav_float16", False)
@@ -1,3 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
from collections.abc import Iterable, Mapping
from dataclasses import replace
from functools import cached_property
@@ -6,7 +9,6 @@ from pathlib import Path
import regex as re
import torch
import torch.nn as nn
from huggingface_hub import hf_hub_download
from vllm.config import VllmConfig
from vllm.logger import init_logger
from vllm.model_executor.models.interfaces import SupportsMultiModal
@@ -28,6 +30,7 @@ from vllm_omni.model_executor.models.voxtral_tts.voxtral_tts_audio_generation im
VoxtralTTSMultiModalProcessor,
VoxtralTTSProcessingInfo,
)
from vllm_omni.transformers_utils.repo_utils import hf_api
logger = init_logger(__name__)
@@ -133,7 +136,7 @@ class VoxtralTTSForConditionalGeneration(
self.voice_to_embedding = {}
for sid in speaker_id:
if self.is_hf_model:
path = hf_hub_download(repo_id=self.repo_id, filename=f"voice_embedding/{sid}.pt")
path = hf_api().hf_hub_download(repo_id=self.repo_id, filename=f"voice_embedding/{sid}.pt")
else:
path = Path(self.repo_id) / "voice_embedding" / f"{sid}.pt"
if Path(path).exists():
@@ -0,0 +1,20 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""Utilities for model repo interaction."""
from huggingface_hub import HfApi
from vllm_omni.version import __version__ as VLLM_OMNI_VERSION
_hf_api: HfApi | None = None
def hf_api() -> HfApi:
"""Return a shared HfApi instance tagged with vLLM-Omni's library info."""
global _hf_api
if _hf_api is None:
_hf_api = HfApi(
library_name="vllm-omni",
library_version=VLLM_OMNI_VERSION,
)
return _hf_api