r1training / rollback_space.py
George-API's picture
Upload folder using huggingface_hub
335441e verified
#!/usr/bin/env python
import os
import sys
import logging
from pathlib import Path
from huggingface_hub import HfApi, login, CommitOperationAdd, CommitOperationDelete
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[logging.StreamHandler(sys.stdout)]
)
logger = logging.getLogger(__name__)
def rollback_space(space_id, commit_hash):
"""Rollback a Hugging Face space to a specific commit."""
try:
# Initialize API
api = HfApi()
logger.info(f"Rolling back space {space_id} to commit {commit_hash}")
# Get the commit info
commit_info = api.list_repo_commits(repo_id=space_id, repo_type="space")[0]
logger.info(f"Current commit: {commit_info.commit_id}")
# Get the files at the target commit
target_files = api.list_repo_files(
repo_id=space_id,
repo_type="space",
revision=commit_hash
)
logger.info(f"Found {len(target_files)} files at target commit")
# Download each file from the target commit
operations = []
for file_path in target_files:
try:
content = api.hf_hub_download(
repo_id=space_id,
repo_type="space",
filename=file_path,
revision=commit_hash
)
with open(content, 'rb') as f:
file_content = f.read()
operations.append(CommitOperationAdd(path_or_fileobj=file_content, path_in_repo=file_path))
logger.info(f"Added {file_path} to rollback operations")
except Exception as e:
logger.warning(f"Failed to download {file_path}: {str(e)}")
if operations:
# Create rollback commit
api.create_commit(
repo_id=space_id,
repo_type="space",
operations=operations,
commit_message=f"Rollback to {commit_hash}",
revision="main"
)
logger.info(f"Successfully rolled back to commit {commit_hash}")
else:
logger.warning("No files to commit")
return True
except Exception as e:
logger.error(f"Error rolling back space: {str(e)}")
return False
def main():
# Set up environment
try:
from dotenv import load_dotenv
env_path = Path(__file__).parent / ".env"
if env_path.exists():
load_dotenv(env_path)
logger.info(f"Loaded environment variables from {env_path}")
except ImportError:
logger.warning("python-dotenv not installed, skipping .env loading")
# Get token
token = os.environ.get("HF_TOKEN")
if not token:
logger.error("HF_TOKEN environment variable not found")
return False
# Login to Hugging Face
login(token=token)
logger.info("Logged in to Hugging Face")
# Rollback space
space_id = "George-API/DeepSpace"
commit_hash = "7ba62477b32b389c2b0d5c85138e8b3c531a76cd"
success = rollback_space(space_id, commit_hash)
if success:
print(f"\nSpace {space_id} successfully rolled back to commit {commit_hash}")
else:
print(f"\nFailed to rollback space {space_id}")
return success
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)