File size: 4,717 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
137
#!/usr/bin/env python
"""
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:
        # Import huggingface_hub
        from huggingface_hub import HfApi, login
        
        # Get required information
        print("\nPlease enter your Hugging Face details:")
        username = input("Username: ")
        token = getpass("Access Token: ")
        
        # Login using the token
        login(token=token, add_to_git_credential=True)
        
        # 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}"
        
        # Initialize the API
        api = HfApi()
        
        # Validate the user is logged in
        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
        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 each file
        print("\nUploading files:")
        success_count = 0
        
        for file_path in files_to_upload:
            try:
                print(f"📤 Uploading {file_path}... ", end="", flush=True)
                
                # Upload the file
                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 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.")
            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:
        # Check if huggingface_hub is installed
        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
        
        # 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)