| # Deploying to Hugging Face Spaces |
|
|
| This guide will walk you through deploying your RAG chatbot to Hugging Face Spaces. |
|
|
| ## Prerequisites |
|
|
| 1. **Hugging Face Account**: Sign up at https://huggingface.co/join |
| 2. **Access Token**: Get your token from https://huggingface.co/settings/tokens |
| - Create a token with "Read" permissions |
| - This token is required for the Inference API to work |
|
|
| ## Step-by-Step Deployment |
|
|
| ### Method 1: Using the Web Interface (Easiest) |
|
|
| 1. **Create a New Space**: |
| - Go to https://huggingface.co/new-space |
| - Fill in: |
| - **Space name**: Choose a name (e.g., `my-rag-chatbot`) |
| - **SDK**: Select **Gradio** |
| - **Hardware**: Choose based on your needs: |
| - **CPU basic**: Free, good for testing |
| - **CPU upgrade**: Better performance |
| - **GPU**: If you need faster model inference |
| - **Visibility**: Public or Private |
| - Click **Create Space** |
|
|
| 2. **Upload Your Files**: |
| - In your new Space, click the **Files and versions** tab |
| - Click **Add file** → **Upload files** |
| - Upload these files: |
| - `app.py` |
| - `ingestion.py` |
| - `requirements.txt` |
| - `README.md` (optional but recommended) |
| - `pdfs/` folder (if you want to include sample PDFs) |
| - `ingest_documents.py` (optional, for manual ingestion) |
|
|
| 3. **Set Up HF_TOKEN Secret (REQUIRED)**: |
| - Go to your Space → **Settings** → **Secrets** |
| - Click **New secret** |
| - Name: `HF_TOKEN` |
| - Value: Paste your Hugging Face access token |
| - Click **Add secret** |
| - **Important**: Without this token, the chatbot will not work as it needs the Inference API |
|
|
| 4. **Important Notes**: |
| - **Vector Store**: The `data/vector_store/` folder is in `.gitignore` and won't be uploaded. You have two options: |
| - **Option A**: Run `ingest_documents.py` on the Space after deployment (via the Space's terminal) |
| - **Option B**: Upload the vector store files manually if they're not too large |
| - **PDFs**: If your PDFs are large (>50MB), consider hosting them elsewhere or using Hugging Face Datasets |
|
|
| 5. **Wait for Build**: Hugging Face will automatically: |
| - Install dependencies from `requirements.txt` |
| - Start your Gradio app |
| - Your Space will be live at: `https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME` |
|
|
| ### Method 2: Using Git (Recommended for Updates) |
|
|
| 1. **Install Git** (if not already installed): |
| - Windows: Download from https://git-scm.com/download/win |
| - Or use Git that comes with GitHub Desktop |
|
|
| 2. **Install Hugging Face CLI**: |
| ```bash |
| py -m pip install huggingface_hub |
| ``` |
|
|
| 3. **Login to Hugging Face**: |
| ```bash |
| huggingface-cli login |
| ``` |
| Enter your access token when prompted. |
|
|
| 4. **Create a New Space** (via web interface): |
| - Go to https://huggingface.co/new-space |
| - Create the space with Gradio SDK |
| - Note your space name (e.g., `YOUR_USERNAME/my-rag-chatbot`) |
|
|
| 5. **Initialize Git in Your Project**: |
| ```bash |
| cd C:\Users\DanielSimeone\Desktop\testing-hugging-face |
| git init |
| git add app.py ingestion.py requirements.txt README.md ingest_documents.py pdfs/ |
| git commit -m "Initial commit for Hugging Face Space" |
| ``` |
|
|
| 6. **Add Hugging Face Remote and Push**: |
| ```bash |
| git remote add origin https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME |
| git push -u origin main |
| ``` |
|
|
| 7. **For Future Updates**: |
| ```bash |
| git add . |
| git commit -m "Update description" |
| git push |
| ``` |
|
|
| ## Post-Deployment Setup |
|
|
| ### Setting Up HF_TOKEN Secret |
| |
| **This is REQUIRED for the chatbot to work!** |
| |
| 1. Go to your Space on Hugging Face |
| 2. Click on **Settings** (gear icon) |
| 3. Scroll down to **Secrets** section |
| 4. Click **New secret** |
| 5. Enter: |
| - **Name**: `HF_TOKEN` |
| - **Value**: Your Hugging Face access token (from https://huggingface.co/settings/tokens) |
| 6. Click **Add secret** |
| 7. The token will be automatically available to your app via `os.environ.get("HF_TOKEN")` |
|
|
| **Note**: The token must have "Read" permissions. The app uses it to access the Inference API for Mistral-7B-Instruct. |
|
|
| ### Setting Up the Vector Store on Hugging Face Spaces |
|
|
| Since the vector store isn't included in the repository, you need to create it on the Space: |
|
|
| 1. **Option A: Use the Space Terminal** (if available): |
| - Go to your Space → **Settings** → Enable **Embedded Gradio SDK** |
| - Or use the Space's built-in terminal/console |
| - Run: `python ingest_documents.py` |
|
|
| 2. **Option B: Upload Vector Store Files**: |
| - If your vector store files are small enough: |
| - Upload `data/vector_store/index.faiss` |
| - Upload `data/vector_store/documents.pkl` |
| - Upload `data/vector_store/embeddings.pkl` |
| - The app will automatically load them on startup |
|
|
| 3. **Option C: Pre-build in a Script**: |
| - Create a `setup.py` or modify the Space to run ingestion on first launch |
| - This is more complex but ensures the vector store is always ready |
|
|
| ## Required Files for Deployment |
|
|
| Your Space needs these files: |
|
|
| - ✅ `app.py` - Main Gradio application |
| - ✅ `ingestion.py` - Document ingestion module |
| - ✅ `requirements.txt` - Python dependencies |
| - ✅ `README.md` - Documentation (optional but recommended) |
| - ⚠️ `data/vector_store/` - Will be created on the Space |
| - ⚠️ `pdfs/` - Optional, include if you want sample PDFs |
|
|
| ## Configuration for Hugging Face Spaces |
|
|
| ### Model Configuration |
|
|
| The chatbot now uses **Mistral-7B-Instruct-v0.2** via Hugging Face Inference API. This means: |
| - **No local model loading**: Faster startup, no need for GPU |
| - **Hosted inference**: The model runs on Hugging Face's infrastructure |
| - **Requires HF_TOKEN**: Must be set in Space secrets (see above) |
| |
| The model is configured in `app.py` and can be changed if needed: |
| ```python |
| chatbot = RAGChatbot(model_name="mistralai/Mistral-7B-Instruct-v0.2") |
| ``` |
| |
| ### App Configuration |
| |
| The current `app.py` is configured for Spaces: |
| |
| 1. **Port**: Uses `os.environ.get("PORT", 7860)` - Spaces automatically sets this |
| 2. **Server name**: Uses `0.0.0.0` (required for Spaces) |
| 3. **Share**: Set to `False` (Spaces provides its own sharing) |
| |
| The launch code is already configured correctly: |
| ```python |
| port = int(os.environ.get("PORT", 7860)) |
| app.launch( |
| share=False, |
| server_name="0.0.0.0", |
| server_port=port, |
| theme=MinimalistTheme() |
| ) |
| ``` |
| |
| ### Optional: Add README Frontmatter |
| |
| Add this to the top of your `README.md` for better Space display: |
| |
| ```yaml |
| --- |
| title: RAG Chatbot |
| emoji: 🤖 |
| colorFrom: blue |
| colorTo: purple |
| sdk: gradio |
| sdk_version: 6.3.0 |
| app_file: app.py |
| pinned: false |
| --- |
| ``` |
| |
| ## Troubleshooting |
| |
| ### Build Fails |
| |
| - Check that all dependencies in `requirements.txt` are correct |
| - Ensure Python version compatibility (Spaces uses Python 3.10 by default) |
| - Check the build logs in your Space's **Logs** tab |
|
|
| ### Vector Store Not Loading |
|
|
| - Verify the vector store files are in the correct location |
| - Check file permissions |
| - Ensure the path in `app.py` is correct (should be `data/vector_store`) |
|
|
| ### Inference API Issues |
|
|
| - **"HF_TOKEN not set" error**: Make sure you've added the `HF_TOKEN` secret in Space settings |
| - **API rate limits**: Free tier has rate limits; upgrade if you need more requests |
| - **Model access errors**: Verify your token has "Read" permissions |
| - **Connection errors**: Check that the Inference API is accessible from your Space |
| |
| ### Memory Issues |
| |
| - If you get out-of-memory errors, consider: |
| - Using a smaller embedding model (e.g., `all-MiniLM-L6-v2` instead of `all-mpnet-base-v2`) |
| - Reducing chunk size in `ingestion.py` |
| - Processing fewer documents at once |
| - Upgrading to a Space with more memory |
| |
| **Note**: Since the model runs via Inference API, memory issues are less likely than with local model loading. |
| |
| ## Updating Your Space |
| |
| After making changes locally: |
| |
| ```bash |
| git add . |
| git commit -m "Description of changes" |
| git push |
| ``` |
| |
| Hugging Face will automatically rebuild your Space. |
| |
| ## Sharing Your Space |
| |
| Once deployed, your Space will be available at: |
| ``` |
| https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME |
| ``` |
| |
| You can share this URL with others! |
| |
| ## Next Steps |
| |
| - Add more PDFs to the `pdfs/` folder |
| - Update URLs in `ingest_documents.py` |
| - Customize the theme further |
| - Add more features to the chatbot |
| |