2B / upload_with_commit.py
37-AN
Update for Hugging Face Space deployment
2a735cc
#!/usr/bin/env python
"""
Hugging Face Space Uploader using the new commit endpoint
"""
import os
import sys
import json
import base64
import requests
from getpass import getpass
def upload_files_commit(space_id, token, files_to_upload):
"""Upload files using the commit endpoint"""
# API URL for commits
api_url = f"https://huggingface.co/api/spaces/{space_id}/commit"
# Headers
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Prepare operations (files to add/modify)
operations = []
for file_path in files_to_upload:
# Read the file content and base64 encode it
with open(file_path, 'rb') as f:
content = f.read()
content_b64 = base64.b64encode(content).decode("ascii")
# Add the operation
operations.append({
"operation": "addOrUpdate",
"path": file_path,
"content": content_b64,
"encoding": "base64"
})
# Prepare the commit payload
payload = {
"operations": operations,
"commit_message": "Fix AI responses and file upload handling"
}
# Make the API request
response = requests.post(api_url, headers=headers, json=payload)
# Check response
if response.status_code == 200:
return True, "Commit successful"
else:
return False, f"Error: {response.status_code} - {response.text}"
def main():
print("=" * 60)
print(" Hugging Face Space File Uploader (Commit Method)")
print("=" * 60)
# Get required information
print("\nPlease enter your Hugging Face details:")
username = input("Username: ")
token = getpass("Access Token: ")
# Space name with validation
while True:
space_name = input("Space Name (without username prefix): ")
if "/" in space_name:
print("Error: Please enter just the Space name without username or slashes")
else:
break
# Construct full space ID
space_id = f"{username}/{space_name}"
# Validate the space exists
print(f"\nValidating Space: {space_id}")
validation_url = f"https://huggingface.co/api/spaces/{space_id}"
headers = {"Authorization": f"Bearer {token}"}
try:
validation_response = requests.get(validation_url, headers=headers)
if validation_response.status_code != 200:
print(f"Error: Space '{space_id}' not found or not accessible.")
print(f"Please check the Space name and your permissions.")
print(f"Space URL would be: https://huggingface.co/spaces/{space_id}")
return False
else:
space_info = validation_response.json()
print(f"βœ… Space found: {space_info.get('title', space_id)}")
print(f"URL: https://huggingface.co/spaces/{space_id}")
except Exception as e:
print(f"Error validating space: {e}")
return False
# Files to upload
files_to_upload = [
"app/core/memory.py",
"app/core/ingestion.py",
"app/ui/streamlit_app.py"
]
# Verify files exist locally
missing_files = [f for f in files_to_upload if not os.path.exists(f)]
if missing_files:
print(f"Error: The following files don't exist locally: {missing_files}")
return False
# Display summary before upload
print("\nPreparing to upload these files:")
for file_path in files_to_upload:
file_size = os.path.getsize(file_path) / 1024 # KB
print(f" - {file_path} ({file_size:.1f} KB)")
# Confirm upload
confirm = input("\nProceed with upload? (y/n): ").lower()
if confirm != 'y':
print("Upload cancelled by user.")
return False
# Upload files with commit
print("\nπŸ“€ Uploading files in a single commit... ", end="", flush=True)
success, message = upload_files_commit(space_id, token, files_to_upload)
if success:
print("βœ… Success!")
print("\nβœ… All files uploaded successfully!")
print(f"View your Space at: https://huggingface.co/spaces/{space_id}")
print("Note: It may take a few minutes for your Space to rebuild with the new changes.")
return True
else:
print("❌ Failed!")
print(f"Error: {message}")
return False
if __name__ == "__main__":
try:
# Check for required packages
try:
import requests
except ImportError:
print("Installing required package: requests")
import subprocess
subprocess.check_call([sys.executable, "-m", "pip", "install", "requests"])
import requests
# Run the main function
success = main()
if success:
sys.exit(0)
else:
sys.exit(1)
except KeyboardInterrupt:
print("\nUpload cancelled by user.")
sys.exit(1)
except Exception as e:
print(f"\nUnexpected error: {e}")
sys.exit(1)