File size: 4,306 Bytes
2a735cc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
#!/usr/bin/env python
"""
Direct uploader for Hugging Face Spaces - simpler approach
"""
import os
import sys
import requests
from getpass import getpass
def upload_file(file_path, space_id, token):
"""Upload a single file to Hugging Face Space using API"""
# Read the file content
with open(file_path, 'rb') as f:
file_content = f.read()
# Construct the API URL
api_url = f"https://huggingface.co/api/spaces/{space_id}/upload/{file_path}"
# Set headers
headers = {
"Authorization": f"Bearer {token}"
}
# Upload the file
response = requests.post(
api_url,
headers=headers,
files={"file": (os.path.basename(file_path), file_content)}
)
# Check response
if response.status_code == 200:
return True
else:
print(f"Error: {response.status_code} - {response.text}")
return False
def main():
print("=" * 60)
print(" Direct File Upload to Hugging Face Space")
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:
print(f"✅ Space found! 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
# Upload each file
print("\nUploading files:")
success_count = 0
for file_path in files_to_upload:
print(f"📤 Uploading {file_path}... ", end="", flush=True)
if upload_file(file_path, space_id, token):
print("✅ Success!")
success_count += 1
else:
print("❌ Failed!")
# Print summary
print(f"\nUpload summary: {success_count}/{len(files_to_upload)} files uploaded successfully.")
if success_count == len(files_to_upload):
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("\n⚠️ Some files failed to upload. Please check the errors above.")
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) |