|
|
|
""" |
|
Upload files to Hugging Face Space using the official huggingface_hub library |
|
""" |
|
import os |
|
import sys |
|
from getpass import getpass |
|
|
|
def main(): |
|
print("=" * 60) |
|
print(" Upload to Hugging Face Space using huggingface_hub") |
|
print("=" * 60) |
|
|
|
try: |
|
|
|
from huggingface_hub import HfApi, login |
|
|
|
|
|
print("\nPlease enter your Hugging Face details:") |
|
username = input("Username: ") |
|
token = getpass("Access Token: ") |
|
|
|
|
|
login(token=token, add_to_git_credential=True) |
|
|
|
|
|
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 |
|
|
|
|
|
space_id = f"{username}/{space_name}" |
|
|
|
|
|
api = HfApi() |
|
|
|
|
|
try: |
|
user_info = api.whoami() |
|
print(f"\nAuthenticated as: {user_info['name']}") |
|
except Exception as e: |
|
print(f"Error authenticating: {e}") |
|
return False |
|
|
|
|
|
files_to_upload = [ |
|
"app/core/memory.py", |
|
"app/core/ingestion.py", |
|
"app/ui/streamlit_app.py" |
|
] |
|
|
|
|
|
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 |
|
|
|
|
|
print("\nPreparing to upload these files:") |
|
for file_path in files_to_upload: |
|
file_size = os.path.getsize(file_path) / 1024 |
|
print(f" - {file_path} ({file_size:.1f} KB)") |
|
|
|
|
|
confirm = input("\nProceed with upload? (y/n): ").lower() |
|
if confirm != 'y': |
|
print("Upload cancelled by user.") |
|
return False |
|
|
|
|
|
print("\nUploading files:") |
|
success_count = 0 |
|
|
|
for file_path in files_to_upload: |
|
try: |
|
print(f"π€ Uploading {file_path}... ", end="", flush=True) |
|
|
|
|
|
api.upload_file( |
|
path_or_fileobj=file_path, |
|
path_in_repo=file_path, |
|
repo_id=space_id, |
|
repo_type="space", |
|
commit_message=f"Fix: Improve {os.path.basename(file_path)} for better responses and file handling" |
|
) |
|
|
|
print("β
Success!") |
|
success_count += 1 |
|
except Exception as e: |
|
print("β Failed!") |
|
print(f" Error: {str(e)}") |
|
|
|
|
|
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.") |
|
print("You may need to upload the files manually through the web interface.") |
|
print(f"Go to: https://huggingface.co/spaces/{space_id}/tree/main") |
|
return False |
|
|
|
except Exception as e: |
|
print(f"\nβ Error: {str(e)}") |
|
return False |
|
|
|
if __name__ == "__main__": |
|
try: |
|
|
|
try: |
|
import huggingface_hub |
|
except ImportError: |
|
print("Installing required package: huggingface_hub") |
|
import subprocess |
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "huggingface_hub"]) |
|
import huggingface_hub |
|
|
|
|
|
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) |