37-AN
		
	commited on
		
		
					Commit 
							
							·
						
						4fe6054
	
1
								Parent(s):
							
							780b542
								
Initial commit for Hugging Face Space deployment
Browse files- DEPLOYMENT.md +126 -0
- README-HF.md +41 -0
- README.md +34 -1
- check_git_status.py +141 -0
- deploy_to_hf.py +279 -0
- space.py +0 -49
    	
        DEPLOYMENT.md
    ADDED
    
    | @@ -0,0 +1,126 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            # Deploying Your Personal AI Assistant to Hugging Face Spaces
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            This guide provides detailed instructions for deploying your Personal AI Assistant with RAG to Hugging Face Spaces.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Prerequisites
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Before you start, make sure you have:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            1. **A Hugging Face Account**: Sign up at [https://huggingface.co/join](https://huggingface.co/join) if you don't have one
         | 
| 10 | 
            +
            2. **Hugging Face API Token**: Create a token at [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens)
         | 
| 11 | 
            +
            3. **Git**: Installed and configured on your machine
         | 
| 12 | 
            +
            4. **Python 3.8+**: With pip for installing packages
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            ## Step 1: Install Dependencies
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            First, install all required packages:
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            ```bash
         | 
| 19 | 
            +
            pip install -r requirements.txt
         | 
| 20 | 
            +
            ```
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            Make sure you have the huggingface_hub package installed:
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            ```bash
         | 
| 25 | 
            +
            pip install huggingface_hub
         | 
| 26 | 
            +
            ```
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            ## Step 2: Check Your Git Configuration
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            Run the check script to ensure your Git is properly configured:
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            ```bash
         | 
| 33 | 
            +
            python check_git_status.py
         | 
| 34 | 
            +
            ```
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            This will:
         | 
| 37 | 
            +
            - Verify Git is installed
         | 
| 38 | 
            +
            - Check your Git configuration
         | 
| 39 | 
            +
            - Confirm your repository status
         | 
| 40 | 
            +
            - Verify Hugging Face configuration
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            Follow any prompts to fix issues that are detected.
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            ## Step 3: Deploy to Hugging Face Spaces
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            Run the deployment script:
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            ```bash
         | 
| 49 | 
            +
            python deploy_to_hf.py
         | 
| 50 | 
            +
            ```
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            You will be prompted to enter:
         | 
| 53 | 
            +
            1. Your Hugging Face username
         | 
| 54 | 
            +
            2. Your Hugging Face API token
         | 
| 55 | 
            +
            3. A name for your Space (or accept the default: personal-rag-assistant)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            The script will:
         | 
| 58 | 
            +
            - Configure your environment
         | 
| 59 | 
            +
            - Create a new Hugging Face Space
         | 
| 60 | 
            +
            - Set up Git for pushing to Hugging Face
         | 
| 61 | 
            +
            - Push your code to the Space
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            ## Step 4: Monitor the Deployment
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            After pushing your code:
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            1. Visit [https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME](https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME)
         | 
| 68 | 
            +
            2. You'll see a "Building" status while Hugging Face builds your Docker container
         | 
| 69 | 
            +
            3. This may take 5-10 minutes for the first build
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            ## Step 5: Using Your Deployed Assistant
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            Once deployment is complete:
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            1. Your app will be accessible at [https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME](https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME)
         | 
| 76 | 
            +
            2. Upload documents through the sidebar
         | 
| 77 | 
            +
            3. Start asking questions about your documents
         | 
| 78 | 
            +
            4. The application automatically saves your conversation history
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            ## Troubleshooting
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            ### Authentication Issues
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            If you encounter Git authentication issues:
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            ```
         | 
| 87 | 
            +
            remote: HTTP Basic: Access denied
         | 
| 88 | 
            +
            ```
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            This usually means:
         | 
| 91 | 
            +
            - Your Hugging Face token is invalid or expired
         | 
| 92 | 
            +
            - You haven't configured Git to use your token
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            Solution: Re-run the deployment script to update your credentials.
         | 
| 95 | 
            +
             | 
| 96 | 
            +
            ### Build Failures
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            If your Space shows a build failure:
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            1. Check the build logs in the Hugging Face Space UI
         | 
| 101 | 
            +
            2. Common issues include:
         | 
| 102 | 
            +
               - Missing dependencies in requirements.txt
         | 
| 103 | 
            +
               - Issues with the Dockerfile
         | 
| 104 | 
            +
               - Errors in your Python code
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            ### Space Creation Errors
         | 
| 107 | 
            +
             | 
| 108 | 
            +
            If the Space creation fails:
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            1. Try creating the Space manually in the Hugging Face UI
         | 
| 111 | 
            +
            2. Then run the deployment script again, which will detect the existing Space
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            ## Managing Your Space
         | 
| 114 | 
            +
             | 
| 115 | 
            +
            After deployment, you can:
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            - **Update Your App**: Make changes locally, then run `python deploy_to_hf.py` again
         | 
| 118 | 
            +
            - **Change Hardware**: Upgrade to a more powerful instance in the Hugging Face UI
         | 
| 119 | 
            +
            - **Monitor Usage**: View usage statistics in the Hugging Face UI
         | 
| 120 | 
            +
            - **Share Your App**: Share the URL with others to use your assistant
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            ## Additional Resources
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            - [Hugging Face Spaces Documentation](https://huggingface.co/docs/hub/spaces)
         | 
| 125 | 
            +
            - [Streamlit Documentation](https://docs.streamlit.io/)
         | 
| 126 | 
            +
            - [LangChain Documentation](https://python.langchain.com/docs/) 
         | 
    	
        README-HF.md
    ADDED
    
    | @@ -0,0 +1,41 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            title: Personal AI Assistant with RAG
         | 
| 3 | 
            +
            emoji: 🤗
         | 
| 4 | 
            +
            colorFrom: indigo
         | 
| 5 | 
            +
            colorTo: purple
         | 
| 6 | 
            +
            sdk: docker
         | 
| 7 | 
            +
            app_port: 7860
         | 
| 8 | 
            +
            pinned: true
         | 
| 9 | 
            +
            license: mit
         | 
| 10 | 
            +
            ---
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            # Personal AI Assistant with RAG
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            A powerful personal AI assistant that uses Retrieval-Augmented Generation (RAG) to provide responses based on your documents and notes.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## Features
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            - Uses free Hugging Face models for language processing and embeddings
         | 
| 19 | 
            +
            - Stores and retrieves information in a vector database 
         | 
| 20 | 
            +
            - Upload PDF, TXT, and CSV files to expand the knowledge base
         | 
| 21 | 
            +
            - Add direct text input to your knowledge base
         | 
| 22 | 
            +
            - View sources for AI responses
         | 
| 23 | 
            +
            - Conversation history tracking
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            ## How to Use
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            1. **Upload Documents**: Use the sidebar to upload files (PDF, TXT, CSV)
         | 
| 28 | 
            +
            2. **Add Text**: Enter text directly into the knowledge base
         | 
| 29 | 
            +
            3. **Ask Questions**: Chat with the assistant about your documents
         | 
| 30 | 
            +
            4. **View Sources**: See where information is coming from
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            ## Built With
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            - Hugging Face Models
         | 
| 35 | 
            +
              - LLM: google/flan-t5-large
         | 
| 36 | 
            +
              - Embeddings: sentence-transformers/all-MiniLM-L6-v2
         | 
| 37 | 
            +
            - LangChain for orchestration
         | 
| 38 | 
            +
            - Qdrant for vector storage
         | 
| 39 | 
            +
            - Streamlit for UI
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            Created by [p3rc03](https://huggingface.co/p3rc03) 
         | 
    	
        README.md
    CHANGED
    
    | @@ -29,6 +29,35 @@ A powerful personal AI assistant that uses Retrieval-Augmented Generation (RAG) | |
| 29 | 
             
            3. **Ask Questions**: Chat with the assistant about your documents
         | 
| 30 | 
             
            4. **View Sources**: See where information is coming from
         | 
| 31 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 32 | 
             
            ## Built With
         | 
| 33 |  | 
| 34 | 
             
            - Hugging Face Models
         | 
| @@ -38,4 +67,8 @@ A powerful personal AI assistant that uses Retrieval-Augmented Generation (RAG) | |
| 38 | 
             
            - Qdrant for vector storage
         | 
| 39 | 
             
            - Streamlit for UI
         | 
| 40 |  | 
| 41 | 
            -
            Created by [p3rc03](https://huggingface.co/p3rc03) 
         | 
|  | |
|  | |
|  | |
|  | 
|  | |
| 29 | 
             
            3. **Ask Questions**: Chat with the assistant about your documents
         | 
| 30 | 
             
            4. **View Sources**: See where information is coming from
         | 
| 31 |  | 
| 32 | 
            +
            ## Deployment
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            ### Local Deployment
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            To run the app locally:
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            1. Clone this repository
         | 
| 39 | 
            +
            2. Install requirements: `pip install -r requirements.txt`
         | 
| 40 | 
            +
            3. Run the Streamlit UI: `python run.py --ui`
         | 
| 41 | 
            +
            4. Or run the API server: `python run.py --api`
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            ### Deploying to Hugging Face Spaces
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            This application can be easily deployed to Hugging Face Spaces for free hosting:
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            1. Make sure you have a Hugging Face account
         | 
| 48 | 
            +
            2. Create a Hugging Face API token at https://huggingface.co/settings/tokens
         | 
| 49 | 
            +
            3. Run the deployment script: `python deploy_to_hf.py`
         | 
| 50 | 
            +
            4. Follow the prompts to enter your username, token, and space name
         | 
| 51 | 
            +
            5. Wait for the deployment to complete
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            If you encounter any issues during deployment, run `python check_git_status.py` to diagnose and fix common problems.
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            The deployment process:
         | 
| 56 | 
            +
            - Creates a Hugging Face Space using the Spaces SDK
         | 
| 57 | 
            +
            - Configures git for pushing to Hugging Face
         | 
| 58 | 
            +
            - Pushes your code to the Space
         | 
| 59 | 
            +
            - Builds and deploys the Docker container automatically
         | 
| 60 | 
            +
             | 
| 61 | 
             
            ## Built With
         | 
| 62 |  | 
| 63 | 
             
            - Hugging Face Models
         | 
|  | |
| 67 | 
             
            - Qdrant for vector storage
         | 
| 68 | 
             
            - Streamlit for UI
         | 
| 69 |  | 
| 70 | 
            +
            Created by [p3rc03](https://huggingface.co/p3rc03) 
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            ## License
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            MIT License - See LICENSE file for details 
         | 
    	
        check_git_status.py
    ADDED
    
    | @@ -0,0 +1,141 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            #!/usr/bin/env python
         | 
| 2 | 
            +
            """
         | 
| 3 | 
            +
            Check Git status and configuration for Hugging Face Space deployment.
         | 
| 4 | 
            +
            This script helps troubleshoot git issues when deploying to Hugging Face Spaces.
         | 
| 5 | 
            +
            """
         | 
| 6 | 
            +
            import subprocess
         | 
| 7 | 
            +
            import os
         | 
| 8 | 
            +
            import sys
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            def run_cmd(cmd, description, show_output=True):
         | 
| 11 | 
            +
                """Run a command and return the result."""
         | 
| 12 | 
            +
                print(f"\n{description}:")
         | 
| 13 | 
            +
                try:
         | 
| 14 | 
            +
                    if show_output:
         | 
| 15 | 
            +
                        subprocess.run(cmd, check=True)
         | 
| 16 | 
            +
                        return True
         | 
| 17 | 
            +
                    else:
         | 
| 18 | 
            +
                        result = subprocess.run(cmd, check=True, capture_output=True, text=True)
         | 
| 19 | 
            +
                        return result.stdout.strip()
         | 
| 20 | 
            +
                except subprocess.CalledProcessError as e:
         | 
| 21 | 
            +
                    print(f"Error: {e}")
         | 
| 22 | 
            +
                    if e.stderr:
         | 
| 23 | 
            +
                        print(f"Details: {e.stderr}")
         | 
| 24 | 
            +
                    return False
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            def check_git_installation():
         | 
| 27 | 
            +
                """Check if git is installed and properly configured."""
         | 
| 28 | 
            +
                print("="*50)
         | 
| 29 | 
            +
                print("Checking Git Installation and Configuration")
         | 
| 30 | 
            +
                print("="*50)
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
                # Check git version
         | 
| 33 | 
            +
                if not run_cmd(["git", "--version"], "Git version"):
         | 
| 34 | 
            +
                    print("Git is not installed. Please install Git and try again.")
         | 
| 35 | 
            +
                    return False
         | 
| 36 | 
            +
                
         | 
| 37 | 
            +
                # Check git configuration
         | 
| 38 | 
            +
                user_name = run_cmd(["git", "config", "user.name"], "Git user name", False)
         | 
| 39 | 
            +
                user_email = run_cmd(["git", "config", "user.email"], "Git user email", False)
         | 
| 40 | 
            +
                
         | 
| 41 | 
            +
                if not user_name or not user_email:
         | 
| 42 | 
            +
                    print("\nGit user name or email is not configured. Please set them:")
         | 
| 43 | 
            +
                    print("  git config --global user.name \"Your Name\"")
         | 
| 44 | 
            +
                    print("  git config --global user.email \"your.email@example.com\"")
         | 
| 45 | 
            +
                    
         | 
| 46 | 
            +
                    # Prompt to set them now
         | 
| 47 | 
            +
                    if input("\nDo you want to set them now? (y/n): ").lower() == 'y':
         | 
| 48 | 
            +
                        name = input("Enter your name: ")
         | 
| 49 | 
            +
                        email = input("Enter your email: ")
         | 
| 50 | 
            +
                        run_cmd(["git", "config", "--global", "user.name", name], "Setting Git user name", False)
         | 
| 51 | 
            +
                        run_cmd(["git", "config", "--global", "user.email", email], "Setting Git user email", False)
         | 
| 52 | 
            +
                        print("Git configuration updated.")
         | 
| 53 | 
            +
                    else:
         | 
| 54 | 
            +
                        return False
         | 
| 55 | 
            +
                else:
         | 
| 56 | 
            +
                    print(f"\nGit user name: {user_name}")
         | 
| 57 | 
            +
                    print(f"Git user email: {user_email}")
         | 
| 58 | 
            +
                
         | 
| 59 | 
            +
                return True
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            def check_git_repository():
         | 
| 62 | 
            +
                """Check the Git repository status."""
         | 
| 63 | 
            +
                print("\n" + "="*50)
         | 
| 64 | 
            +
                print("Checking Git Repository Status")
         | 
| 65 | 
            +
                print("="*50)
         | 
| 66 | 
            +
                
         | 
| 67 | 
            +
                # Check if this is a git repository
         | 
| 68 | 
            +
                is_git_repo = os.path.exists(".git")
         | 
| 69 | 
            +
                print(f"\nIs Git repository: {'Yes' if is_git_repo else 'No'}")
         | 
| 70 | 
            +
                
         | 
| 71 | 
            +
                if not is_git_repo:
         | 
| 72 | 
            +
                    print("This is not a git repository. You can initialize it with 'git init'")
         | 
| 73 | 
            +
                    
         | 
| 74 | 
            +
                    # Prompt to initialize git
         | 
| 75 | 
            +
                    if input("\nDo you want to initialize git now? (y/n): ").lower() == 'y':
         | 
| 76 | 
            +
                        run_cmd(["git", "init"], "Initializing Git repository")
         | 
| 77 | 
            +
                        print("Git repository initialized.")
         | 
| 78 | 
            +
                    else:
         | 
| 79 | 
            +
                        return False
         | 
| 80 | 
            +
                
         | 
| 81 | 
            +
                # Check git status
         | 
| 82 | 
            +
                run_cmd(["git", "status"], "Git status")
         | 
| 83 | 
            +
                
         | 
| 84 | 
            +
                # Check remote repositories
         | 
| 85 | 
            +
                run_cmd(["git", "remote", "-v"], "Git remotes")
         | 
| 86 | 
            +
                
         | 
| 87 | 
            +
                return True
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            def check_huggingface_configuration():
         | 
| 90 | 
            +
                """Check Hugging Face-specific configurations."""
         | 
| 91 | 
            +
                print("\n" + "="*50)
         | 
| 92 | 
            +
                print("Checking Hugging Face Configuration")
         | 
| 93 | 
            +
                print("="*50)
         | 
| 94 | 
            +
                
         | 
| 95 | 
            +
                # Check if huggingface_hub is installed
         | 
| 96 | 
            +
                try:
         | 
| 97 | 
            +
                    import huggingface_hub
         | 
| 98 | 
            +
                    print(f"\nhuggingface_hub version: {huggingface_hub.__version__}")
         | 
| 99 | 
            +
                except ImportError:
         | 
| 100 | 
            +
                    print("\nhuggingface_hub is not installed. Installing...")
         | 
| 101 | 
            +
                    subprocess.run([sys.executable, "-m", "pip", "install", "huggingface_hub"], check=True)
         | 
| 102 | 
            +
                    print("huggingface_hub installed.")
         | 
| 103 | 
            +
                
         | 
| 104 | 
            +
                # Check environment variables
         | 
| 105 | 
            +
                hf_username = os.environ.get("HF_USERNAME")
         | 
| 106 | 
            +
                hf_token = os.environ.get("HF_TOKEN")
         | 
| 107 | 
            +
                
         | 
| 108 | 
            +
                print(f"\nHF_USERNAME is {'set' if hf_username else 'not set'}")
         | 
| 109 | 
            +
                print(f"HF_TOKEN is {'set' if hf_token else 'not set'}")
         | 
| 110 | 
            +
                
         | 
| 111 | 
            +
                if not hf_username or not hf_token:
         | 
| 112 | 
            +
                    print("\nPlease set HF_USERNAME and HF_TOKEN environment variables.")
         | 
| 113 | 
            +
                    print("You can run the deploy_to_hf.py script to do this.")
         | 
| 114 | 
            +
                
         | 
| 115 | 
            +
                return True
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            def main():
         | 
| 118 | 
            +
                """Main function to check git status."""
         | 
| 119 | 
            +
                # Check git installation
         | 
| 120 | 
            +
                if not check_git_installation():
         | 
| 121 | 
            +
                    print("\nGit installation or configuration issue. Please fix and try again.")
         | 
| 122 | 
            +
                    return
         | 
| 123 | 
            +
                
         | 
| 124 | 
            +
                # Check git repository
         | 
| 125 | 
            +
                if not check_git_repository():
         | 
| 126 | 
            +
                    print("\nGit repository issue. Please fix and try again.")
         | 
| 127 | 
            +
                    return
         | 
| 128 | 
            +
                
         | 
| 129 | 
            +
                # Check Hugging Face configuration
         | 
| 130 | 
            +
                if not check_huggingface_configuration():
         | 
| 131 | 
            +
                    print("\nHugging Face configuration issue. Please fix and try again.")
         | 
| 132 | 
            +
                    return
         | 
| 133 | 
            +
                
         | 
| 134 | 
            +
                print("\n" + "="*50)
         | 
| 135 | 
            +
                print("Git status check completed successfully!")
         | 
| 136 | 
            +
                print("="*50)
         | 
| 137 | 
            +
                print("\nYou are ready to deploy to Hugging Face Spaces.")
         | 
| 138 | 
            +
                print("Run 'python deploy_to_hf.py' to begin deployment.")
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            if __name__ == "__main__":
         | 
| 141 | 
            +
                main() 
         | 
    	
        deploy_to_hf.py
    ADDED
    
    | @@ -0,0 +1,279 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            #!/usr/bin/env python
         | 
| 2 | 
            +
            """
         | 
| 3 | 
            +
            Helper script to deploy to Hugging Face Spaces.
         | 
| 4 | 
            +
            This script will help you set environment variables and deploy your app.
         | 
| 5 | 
            +
            """
         | 
| 6 | 
            +
            import os
         | 
| 7 | 
            +
            import sys
         | 
| 8 | 
            +
            import subprocess
         | 
| 9 | 
            +
            from getpass import getpass
         | 
| 10 | 
            +
            from huggingface_hub import HfApi, SpaceHardware, SpaceStage
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            def setup_deployment():
         | 
| 13 | 
            +
                """Set up deployment environment variables and authenticate."""
         | 
| 14 | 
            +
                print("="*50)
         | 
| 15 | 
            +
                print("Hugging Face Spaces Deployment Setup")
         | 
| 16 | 
            +
                print("="*50)
         | 
| 17 | 
            +
                
         | 
| 18 | 
            +
                # Get user credentials
         | 
| 19 | 
            +
                username = input("Enter your Hugging Face username: ")
         | 
| 20 | 
            +
                token = getpass("Enter your Hugging Face token (from https://huggingface.co/settings/tokens): ")
         | 
| 21 | 
            +
                space_name = input("Enter your Space name (default: personal-rag-assistant): ") or "personal-rag-assistant"
         | 
| 22 | 
            +
                
         | 
| 23 | 
            +
                # Set environment variables
         | 
| 24 | 
            +
                os.environ["HF_USERNAME"] = username
         | 
| 25 | 
            +
                os.environ["HF_TOKEN"] = token
         | 
| 26 | 
            +
                os.environ["SPACE_NAME"] = space_name
         | 
| 27 | 
            +
                
         | 
| 28 | 
            +
                # Write credentials to .env file
         | 
| 29 | 
            +
                with open(".env", "w") as f:
         | 
| 30 | 
            +
                    f.write(f"HF_API_KEY={token}\n")
         | 
| 31 | 
            +
                    f.write(f"HF_USERNAME={username}\n")
         | 
| 32 | 
            +
                    f.write(f"SPACE_NAME={space_name}\n")
         | 
| 33 | 
            +
                    f.write("LLM_MODEL=google/flan-t5-large\n")
         | 
| 34 | 
            +
                    f.write("EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2\n")
         | 
| 35 | 
            +
                    f.write("VECTOR_DB_PATH=./data/vector_db\n")
         | 
| 36 | 
            +
                    f.write("COLLECTION_NAME=personal_assistant\n")
         | 
| 37 | 
            +
                    f.write("DEFAULT_TEMPERATURE=0.7\n")
         | 
| 38 | 
            +
                    f.write("CHUNK_SIZE=1000\n")
         | 
| 39 | 
            +
                    f.write("CHUNK_OVERLAP=200\n")
         | 
| 40 | 
            +
                    f.write("MAX_TOKENS=512\n")
         | 
| 41 | 
            +
                
         | 
| 42 | 
            +
                # Set up git credential helper for Hugging Face
         | 
| 43 | 
            +
                try:
         | 
| 44 | 
            +
                    # Configure git to use credential store
         | 
| 45 | 
            +
                    subprocess.run(["git", "config", "--global", "credential.helper", "store"], check=True)
         | 
| 46 | 
            +
                    
         | 
| 47 | 
            +
                    # Create .git-credentials file with token
         | 
| 48 | 
            +
                    home_dir = os.path.expanduser("~")
         | 
| 49 | 
            +
                    credentials_path = os.path.join(home_dir, ".git-credentials")
         | 
| 50 | 
            +
                    
         | 
| 51 | 
            +
                    # Check if credentials already exist
         | 
| 52 | 
            +
                    credentials_exist = os.path.exists(credentials_path)
         | 
| 53 | 
            +
                    
         | 
| 54 | 
            +
                    with open(credentials_path, "a" if credentials_exist else "w") as f:
         | 
| 55 | 
            +
                        f.write(f"https://{username}:{token}@huggingface.co\n")
         | 
| 56 | 
            +
                    
         | 
| 57 | 
            +
                    # Make sure credentials file has correct permissions
         | 
| 58 | 
            +
                    if sys.platform != "win32":  # Skip on Windows
         | 
| 59 | 
            +
                        os.chmod(credentials_path, 0o600)
         | 
| 60 | 
            +
                    
         | 
| 61 | 
            +
                    print("Git credentials configured for Hugging Face.")
         | 
| 62 | 
            +
                except Exception as e:
         | 
| 63 | 
            +
                    print(f"Warning: Could not set up git credentials: {e}")
         | 
| 64 | 
            +
                    print("You may need to enter your credentials manually during push.")
         | 
| 65 | 
            +
                
         | 
| 66 | 
            +
                print(f"\nEnvironment variables set for {username}/{space_name}")
         | 
| 67 | 
            +
                return username, token, space_name
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            def create_space(username, token, space_name):
         | 
| 70 | 
            +
                """Create a Hugging Face Space directly using the HfApi."""
         | 
| 71 | 
            +
                print("\nCreating Hugging Face Space...")
         | 
| 72 | 
            +
                
         | 
| 73 | 
            +
                try:
         | 
| 74 | 
            +
                    # Initialize the API
         | 
| 75 | 
            +
                    api = HfApi(token=token)
         | 
| 76 | 
            +
                    
         | 
| 77 | 
            +
                    # Check if space exists
         | 
| 78 | 
            +
                    try:
         | 
| 79 | 
            +
                        spaces = api.list_spaces(author=username)
         | 
| 80 | 
            +
                        exists = any(space.id == f"{username}/{space_name}" for space in spaces)
         | 
| 81 | 
            +
                        if exists:
         | 
| 82 | 
            +
                            print(f"Space {username}/{space_name} exists.")
         | 
| 83 | 
            +
                        else:
         | 
| 84 | 
            +
                            print(f"Space {username}/{space_name} does not exist. Creating...")
         | 
| 85 | 
            +
                            # Create the space
         | 
| 86 | 
            +
                            api.create_space(
         | 
| 87 | 
            +
                                name=space_name,
         | 
| 88 | 
            +
                                organization=None,  # Use None for personal account
         | 
| 89 | 
            +
                                private=False,
         | 
| 90 | 
            +
                                sdk="docker",
         | 
| 91 | 
            +
                                hardware=SpaceHardware.CPU_BASIC,
         | 
| 92 | 
            +
                                storage=1,
         | 
| 93 | 
            +
                                sleep_time=3600,  # 1 hour of inactivity before sleep
         | 
| 94 | 
            +
                                status=SpaceStage.RUNNING,
         | 
| 95 | 
            +
                            )
         | 
| 96 | 
            +
                            print(f"Space created successfully.")
         | 
| 97 | 
            +
                    except Exception as e:
         | 
| 98 | 
            +
                        print(f"Error checking/creating space: {e}")
         | 
| 99 | 
            +
                        print("You may need to create the Space manually in the Hugging Face UI.")
         | 
| 100 | 
            +
                        print(f"Visit: https://huggingface.co/spaces")
         | 
| 101 | 
            +
                        return False
         | 
| 102 | 
            +
                    
         | 
| 103 | 
            +
                    print(f"Space URL: https://huggingface.co/spaces/{username}/{space_name}")
         | 
| 104 | 
            +
                    return True
         | 
| 105 | 
            +
                except Exception as e:
         | 
| 106 | 
            +
                    print(f"Error creating space: {e}")
         | 
| 107 | 
            +
                    print("\nTrying to proceed anyway, as the space might already exist.")
         | 
| 108 | 
            +
                    return True
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            def prepare_git_push(username, space_name):
         | 
| 111 | 
            +
                """Prepare git for pushing to Hugging Face Space."""
         | 
| 112 | 
            +
                print("\nPreparing to push code to Hugging Face Space...")
         | 
| 113 | 
            +
                
         | 
| 114 | 
            +
                try:
         | 
| 115 | 
            +
                    # Initialize git if not already done
         | 
| 116 | 
            +
                    if not os.path.exists(".git"):
         | 
| 117 | 
            +
                        subprocess.run(["git", "init"], check=True)
         | 
| 118 | 
            +
                        print("Git repository initialized.")
         | 
| 119 | 
            +
                    
         | 
| 120 | 
            +
                    # Configure git remote
         | 
| 121 | 
            +
                    remote_url = f"https://huggingface.co/spaces/{username}/{space_name}"
         | 
| 122 | 
            +
                    
         | 
| 123 | 
            +
                    # Check all remotes
         | 
| 124 | 
            +
                    result = subprocess.run(["git", "remote"], capture_output=True, text=True)
         | 
| 125 | 
            +
                    remotes = result.stdout.strip().split('\n') if result.stdout else []
         | 
| 126 | 
            +
                    
         | 
| 127 | 
            +
                    print(f"Existing remotes: {remotes}")
         | 
| 128 | 
            +
                    
         | 
| 129 | 
            +
                    # Check if 'hf' remote exists
         | 
| 130 | 
            +
                    if "hf" not in remotes:
         | 
| 131 | 
            +
                        # Add the remote
         | 
| 132 | 
            +
                        print("Adding 'hf' remote...")
         | 
| 133 | 
            +
                        try:
         | 
| 134 | 
            +
                            add_result = subprocess.run(["git", "remote", "add", "hf", remote_url], capture_output=True, text=True)
         | 
| 135 | 
            +
                            if add_result.returncode != 0:
         | 
| 136 | 
            +
                                print(f"Error adding remote: {add_result.stderr}")
         | 
| 137 | 
            +
                                return False
         | 
| 138 | 
            +
                            print("Successfully added 'hf' remote")
         | 
| 139 | 
            +
                        except Exception as e:
         | 
| 140 | 
            +
                            print(f"Error adding remote: {e}")
         | 
| 141 | 
            +
                            return False
         | 
| 142 | 
            +
                    else:
         | 
| 143 | 
            +
                        # Update existing remote
         | 
| 144 | 
            +
                        print("Updating 'hf' remote...")
         | 
| 145 | 
            +
                        try:
         | 
| 146 | 
            +
                            update_result = subprocess.run(["git", "remote", "set-url", "hf", remote_url], capture_output=True, text=True)
         | 
| 147 | 
            +
                            if update_result.returncode != 0:
         | 
| 148 | 
            +
                                print(f"Error updating remote: {update_result.stderr}")
         | 
| 149 | 
            +
                                return False
         | 
| 150 | 
            +
                            print("Successfully updated 'hf' remote")
         | 
| 151 | 
            +
                        except Exception as e:
         | 
| 152 | 
            +
                            print(f"Error updating remote: {e}")
         | 
| 153 | 
            +
                            return False
         | 
| 154 | 
            +
                    
         | 
| 155 | 
            +
                    # Verify remote was added/updated
         | 
| 156 | 
            +
                    verify_remote = subprocess.run(["git", "remote", "-v"], capture_output=True, text=True)
         | 
| 157 | 
            +
                    print(f"Remote verification: {verify_remote.stdout}")
         | 
| 158 | 
            +
                    
         | 
| 159 | 
            +
                    # Make sure we have user details
         | 
| 160 | 
            +
                    try:
         | 
| 161 | 
            +
                        user_name = subprocess.run(["git", "config", "user.name"], capture_output=True, text=True).stdout.strip()
         | 
| 162 | 
            +
                        user_email = subprocess.run(["git", "config", "user.email"], capture_output=True, text=True).stdout.strip()
         | 
| 163 | 
            +
                        
         | 
| 164 | 
            +
                        if not user_name or not user_email:
         | 
| 165 | 
            +
                            # Set default values if not configured
         | 
| 166 | 
            +
                            name = input("Enter your name for git config: ") or username
         | 
| 167 | 
            +
                            email = input("Enter your email for git config: ") or f"{username}@example.com"
         | 
| 168 | 
            +
                            
         | 
| 169 | 
            +
                            subprocess.run(["git", "config", "--global", "user.name", name], check=True)
         | 
| 170 | 
            +
                            subprocess.run(["git", "config", "--global", "user.email", email], check=True)
         | 
| 171 | 
            +
                            print("Git user configuration updated.")
         | 
| 172 | 
            +
                    except subprocess.CalledProcessError:
         | 
| 173 | 
            +
                        print("Warning: Could not check git user configuration.")
         | 
| 174 | 
            +
                    
         | 
| 175 | 
            +
                    # Add and commit files
         | 
| 176 | 
            +
                    subprocess.run(["git", "add", "."], check=True)
         | 
| 177 | 
            +
                    try:
         | 
| 178 | 
            +
                        subprocess.run(["git", "commit", "-m", "Initial commit for Hugging Face Space deployment"], check=True)
         | 
| 179 | 
            +
                    except subprocess.CalledProcessError:
         | 
| 180 | 
            +
                        # Check if there are changes to commit
         | 
| 181 | 
            +
                        status = subprocess.run(["git", "status", "--porcelain"], capture_output=True, text=True, check=True).stdout.strip()
         | 
| 182 | 
            +
                        if not status:
         | 
| 183 | 
            +
                            print("No changes to commit.")
         | 
| 184 | 
            +
                        else:
         | 
| 185 | 
            +
                            print("Error making commit. Check git configuration.")
         | 
| 186 | 
            +
                            return False
         | 
| 187 | 
            +
                    
         | 
| 188 | 
            +
                    print("\nGit repository prepared for pushing")
         | 
| 189 | 
            +
                except Exception as e:
         | 
| 190 | 
            +
                    print(f"Error preparing git: {e}")
         | 
| 191 | 
            +
                    return False
         | 
| 192 | 
            +
                
         | 
| 193 | 
            +
                return True
         | 
| 194 | 
            +
             | 
| 195 | 
            +
            def push_to_space(username, token):
         | 
| 196 | 
            +
                """Push code to Hugging Face Space."""
         | 
| 197 | 
            +
                print("\nPushing code to Hugging Face Space...")
         | 
| 198 | 
            +
                print("This may take a few minutes...")
         | 
| 199 | 
            +
                
         | 
| 200 | 
            +
                try:
         | 
| 201 | 
            +
                    # Set git credentials environment variables for this push
         | 
| 202 | 
            +
                    env = os.environ.copy()
         | 
| 203 | 
            +
                    env["GIT_USERNAME"] = username
         | 
| 204 | 
            +
                    env["GIT_PASSWORD"] = token
         | 
| 205 | 
            +
                    
         | 
| 206 | 
            +
                    # Determine current branch
         | 
| 207 | 
            +
                    current_branch = subprocess.run(
         | 
| 208 | 
            +
                        ["git", "branch", "--show-current"], 
         | 
| 209 | 
            +
                        capture_output=True, text=True
         | 
| 210 | 
            +
                    ).stdout.strip()
         | 
| 211 | 
            +
                        
         | 
| 212 | 
            +
                    if not current_branch:
         | 
| 213 | 
            +
                        current_branch = "master"  # Default to master if no branch is returned
         | 
| 214 | 
            +
                    
         | 
| 215 | 
            +
                    # Push code - force push to override any existing content
         | 
| 216 | 
            +
                    print(f"Pushing from branch {current_branch} to main...")
         | 
| 217 | 
            +
                    cmd = ["git", "push", "-f", "hf", f"{current_branch}:main"]
         | 
| 218 | 
            +
                    
         | 
| 219 | 
            +
                    print("\nRunning git push command...")
         | 
| 220 | 
            +
                    print(f"Pushing to Space as user: {username}")
         | 
| 221 | 
            +
                    
         | 
| 222 | 
            +
                    # Try to push
         | 
| 223 | 
            +
                    try:
         | 
| 224 | 
            +
                        subprocess.run(cmd, check=True, env=env)
         | 
| 225 | 
            +
                    except subprocess.CalledProcessError as e:
         | 
| 226 | 
            +
                        print(f"Error during push: {e}")
         | 
| 227 | 
            +
                        
         | 
| 228 | 
            +
                        # Try direct URL push as alternative
         | 
| 229 | 
            +
                        print("\nTrying alternative direct URL push...")
         | 
| 230 | 
            +
                        direct_url = f"https://{username}:{token}@huggingface.co/spaces/{username}/{os.environ.get('SPACE_NAME')}"
         | 
| 231 | 
            +
                        alt_cmd = ["git", "push", "-f", direct_url, f"{current_branch}:main"]
         | 
| 232 | 
            +
                        
         | 
| 233 | 
            +
                        try:
         | 
| 234 | 
            +
                            subprocess.run(alt_cmd, check=True, env=env)
         | 
| 235 | 
            +
                        except subprocess.CalledProcessError as e:
         | 
| 236 | 
            +
                            print(f"Direct URL push also failed: {e}")
         | 
| 237 | 
            +
                            raise
         | 
| 238 | 
            +
                    
         | 
| 239 | 
            +
                    print("\nCode pushed to Hugging Face Space successfully!")
         | 
| 240 | 
            +
                except subprocess.CalledProcessError as e:
         | 
| 241 | 
            +
                    print(f"Error pushing code: {e}")
         | 
| 242 | 
            +
                    print("\nTroubleshooting git push issues:")
         | 
| 243 | 
            +
                    print("1. Ensure your Hugging Face token has write access")
         | 
| 244 | 
            +
                    print("2. Try manually setting up git credentials:")
         | 
| 245 | 
            +
                    print(f"   git config --global credential.helper store")
         | 
| 246 | 
            +
                    print(f"   echo 'https://{username}:{token}@huggingface.co' > ~/.git-credentials")
         | 
| 247 | 
            +
                    print("3. Try pushing directly with:")
         | 
| 248 | 
            +
                    print(f"   git push -f https://{username}:{token}@huggingface.co/spaces/{username}/{os.environ.get('SPACE_NAME')} main")
         | 
| 249 | 
            +
                    return False
         | 
| 250 | 
            +
                
         | 
| 251 | 
            +
                return True
         | 
| 252 | 
            +
             | 
| 253 | 
            +
            def main():
         | 
| 254 | 
            +
                """Main function to run the deployment process."""
         | 
| 255 | 
            +
                username, token, space_name = setup_deployment()
         | 
| 256 | 
            +
                
         | 
| 257 | 
            +
                # Create the Space
         | 
| 258 | 
            +
                if not create_space(username, token, space_name):
         | 
| 259 | 
            +
                    print("Failed to create Space. Attempting to continue anyway.")
         | 
| 260 | 
            +
                
         | 
| 261 | 
            +
                # Prepare git for pushing
         | 
| 262 | 
            +
                if not prepare_git_push(username, space_name):
         | 
| 263 | 
            +
                    print("Failed to prepare git. Exiting.")
         | 
| 264 | 
            +
                    return
         | 
| 265 | 
            +
                
         | 
| 266 | 
            +
                # Push code to Space
         | 
| 267 | 
            +
                if not push_to_space(username, token):
         | 
| 268 | 
            +
                    print("Failed to push code. Exiting.")
         | 
| 269 | 
            +
                    return
         | 
| 270 | 
            +
                
         | 
| 271 | 
            +
                print("\n" + "="*50)
         | 
| 272 | 
            +
                print(f"Deployment completed! Your app should be available at:")
         | 
| 273 | 
            +
                print(f"https://huggingface.co/spaces/{username}/{space_name}")
         | 
| 274 | 
            +
                print("="*50)
         | 
| 275 | 
            +
                print("\nNote: It may take a few minutes for the Space to build and deploy your app.")
         | 
| 276 | 
            +
                print("You can monitor the build progress on the Space page.")
         | 
| 277 | 
            +
             | 
| 278 | 
            +
            if __name__ == "__main__":
         | 
| 279 | 
            +
                main() 
         | 
    	
        space.py
    DELETED
    
    | @@ -1,49 +0,0 @@ | |
| 1 | 
            -
            #!/usr/bin/env python
         | 
| 2 | 
            -
            """
         | 
| 3 | 
            -
            Register this app with Hugging Face Spaces SDK.
         | 
| 4 | 
            -
            This file is used for deploying the app to Hugging Face Spaces.
         | 
| 5 | 
            -
            """
         | 
| 6 | 
            -
            import os
         | 
| 7 | 
            -
            import subprocess
         | 
| 8 | 
            -
            import sys
         | 
| 9 | 
            -
            from huggingface_hub import SpaceHardware, SpaceStage, SpaceSDK
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            def create_space():
         | 
| 12 | 
            -
                """Create or update a Hugging Face Space."""
         | 
| 13 | 
            -
                # Get the Space name or use a default
         | 
| 14 | 
            -
                space_name = os.environ.get("SPACE_NAME", "personal-rag-assistant")
         | 
| 15 | 
            -
                owner = os.environ.get("HF_USERNAME")
         | 
| 16 | 
            -
                
         | 
| 17 | 
            -
                if not owner:
         | 
| 18 | 
            -
                    print("Please set the HF_USERNAME environment variable to your Hugging Face username.")
         | 
| 19 | 
            -
                    sys.exit(1)
         | 
| 20 | 
            -
                
         | 
| 21 | 
            -
                # Initialize the SDK
         | 
| 22 | 
            -
                sdk = SpaceSDK(
         | 
| 23 | 
            -
                    space_id=f"{owner}/{space_name}",
         | 
| 24 | 
            -
                    token=os.environ.get("HF_TOKEN")
         | 
| 25 | 
            -
                )
         | 
| 26 | 
            -
                
         | 
| 27 | 
            -
                # Check if space exists, if not create it
         | 
| 28 | 
            -
                try:
         | 
| 29 | 
            -
                    space_info = sdk.get_space_runtime()
         | 
| 30 | 
            -
                    print(f"Space {owner}/{space_name} exists.")
         | 
| 31 | 
            -
                    exists = True
         | 
| 32 | 
            -
                except Exception:
         | 
| 33 | 
            -
                    exists = False
         | 
| 34 | 
            -
                
         | 
| 35 | 
            -
                # Create or update the space
         | 
| 36 | 
            -
                if not exists:
         | 
| 37 | 
            -
                    print(f"Creating new space: {owner}/{space_name}")
         | 
| 38 | 
            -
                    sdk.create_space(
         | 
| 39 | 
            -
                        space_hardware=SpaceHardware.CPU_BASIC,
         | 
| 40 | 
            -
                        space_storage=1,
         | 
| 41 | 
            -
                        space_sleep_time=3600,  # 1 hour of inactivity before sleep
         | 
| 42 | 
            -
                        space_stage=SpaceStage.RUNNING,
         | 
| 43 | 
            -
                    )
         | 
| 44 | 
            -
                
         | 
| 45 | 
            -
                print(f"Space URL: https://huggingface.co/spaces/{owner}/{space_name}")
         | 
| 46 | 
            -
                return sdk
         | 
| 47 | 
            -
             | 
| 48 | 
            -
            if __name__ == "__main__":
         | 
| 49 | 
            -
                create_space() 
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
