94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
147 lines
3.6 KiB
Python
Executable File
147 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Clean up stale HuggingFace cache artifacts from previous failed downloads.
|
|
|
|
This script removes incomplete marker files, temporary files, and lock files
|
|
from the HuggingFace cache directory. These artifacts can accumulate from
|
|
interrupted or failed downloads and may interfere with future downloads.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import List
|
|
|
|
try:
|
|
from huggingface_hub import constants
|
|
|
|
HF_HUB_AVAILABLE = True
|
|
except ImportError:
|
|
print("Warning: huggingface_hub not available")
|
|
HF_HUB_AVAILABLE = False
|
|
|
|
|
|
def get_hf_cache_dir() -> str:
|
|
"""Get the HuggingFace cache directory."""
|
|
if HF_HUB_AVAILABLE:
|
|
return constants.HF_HUB_CACHE
|
|
|
|
# Fallback to environment variable or default
|
|
hf_home = os.environ.get("HF_HOME", os.path.expanduser("~/.cache/huggingface"))
|
|
return os.path.join(hf_home, "hub")
|
|
|
|
|
|
def find_stale_artifacts(cache_dir: str) -> List[Path]:
|
|
"""
|
|
Find stale artifact files in the HuggingFace cache.
|
|
|
|
Args:
|
|
cache_dir: HuggingFace cache directory
|
|
|
|
Returns:
|
|
List of paths to stale artifact files
|
|
"""
|
|
cache_path = Path(cache_dir)
|
|
|
|
if not cache_path.exists():
|
|
return []
|
|
|
|
# Patterns for stale files to clean up
|
|
patterns = [
|
|
"**/*.incomplete", # Incomplete download markers
|
|
"**/*.tmp", # Temporary files
|
|
"**/*.lock", # Lock files from interrupted downloads
|
|
]
|
|
|
|
stale_files = []
|
|
for pattern in patterns:
|
|
stale_files.extend(cache_path.glob(pattern))
|
|
|
|
return stale_files
|
|
|
|
|
|
def cleanup_artifacts(artifacts: List[Path]) -> tuple[int, int]:
|
|
"""
|
|
Remove stale artifact files.
|
|
|
|
Args:
|
|
artifacts: List of file paths to remove
|
|
|
|
Returns:
|
|
Tuple of (successful_removals, failed_removals)
|
|
"""
|
|
successful = 0
|
|
failed = 0
|
|
|
|
for file_path in artifacts:
|
|
try:
|
|
file_path.unlink()
|
|
print(f" Removed: {file_path}")
|
|
successful += 1
|
|
except Exception as e:
|
|
print(f" Warning: Could not remove {file_path}: {e}")
|
|
failed += 1
|
|
|
|
return successful, failed
|
|
|
|
|
|
def main() -> int:
|
|
"""
|
|
Main cleanup logic.
|
|
|
|
Returns:
|
|
Always returns 0 (cleanup is best-effort and should not fail CI)
|
|
"""
|
|
print("=" * 70)
|
|
print("HuggingFace Cache Cleanup")
|
|
print("=" * 70)
|
|
|
|
# Get cache directory
|
|
cache_dir = get_hf_cache_dir()
|
|
print(f"Cache directory: {cache_dir}")
|
|
|
|
if not os.path.exists(cache_dir):
|
|
print("Cache directory does not exist - nothing to clean")
|
|
return 0
|
|
|
|
print("-" * 70)
|
|
|
|
# Find stale artifacts
|
|
print("Scanning for stale artifacts...")
|
|
stale_artifacts = find_stale_artifacts(cache_dir)
|
|
|
|
if not stale_artifacts:
|
|
print("✓ No stale cache artifacts found")
|
|
return 0
|
|
|
|
# Clean up artifacts
|
|
print(f"Found {len(stale_artifacts)} stale artifact(s) to remove:")
|
|
successful, failed = cleanup_artifacts(stale_artifacts)
|
|
|
|
print("-" * 70)
|
|
|
|
# Summary
|
|
if failed > 0:
|
|
print(f"⚠ Cleaned up {successful} file(s), {failed} removal(s) failed")
|
|
else:
|
|
print(f"✓ Successfully cleaned up {successful} stale file(s)")
|
|
|
|
# Always return 0 - cleanup failures should not fail CI
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
exit_code = main()
|
|
sys.exit(exit_code)
|
|
except KeyboardInterrupt:
|
|
print("\nInterrupted by user")
|
|
sys.exit(0)
|
|
except Exception as e:
|
|
print(f"ERROR: Unexpected error during cleanup: {e}")
|
|
import traceback
|
|
|
|
traceback.print_exc()
|
|
# Still return 0 - cleanup failures should not fail CI
|
|
sys.exit(0)
|