|
Download README.md from purposeanalytics/organic-chatbot: direct link, hf CLI and curl.
- Browser
- Download file 9.76 kB
-
https://huggingface.co/spaces/purposeanalytics/organic-chatbot/resolve/main/README.md
- Command line
-
hf download hf://spaces/purposeanalytics/organic-chatbot/README.md
-
curl -L -o README.md https://huggingface.co/spaces/purposeanalytics/organic-chatbot/resolve/main/README.md
9.76 kB
| title: RAG Chatbot | |
| emoji: π€ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: gradio | |
| sdk_version: 6.3.0 | |
| app_file: app.py | |
| pinned: false | |
| # Hugging Face RAG Chatbot | |
| A Retrieval-Augmented Generation (RAG) chatbot that can ingest PDFs and URLs, then answer questions based on the ingested documents. Built for deployment on Hugging Face Spaces. | |
| ## Features | |
| - π **PDF Ingestion**: Upload and process PDF documents | |
| - π **URL Ingestion**: Extract and process content from web URLs | |
| - π **Vector Search**: Semantic search using sentence transformers | |
| - π¬ **Chatbot Interface**: Interactive Gradio interface for querying documents | |
| - π **Hugging Face Ready**: Configured for easy deployment to Hugging Face Spaces | |
| ## Setup | |
| ### Local Development | |
| 1. **Install dependencies:** | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| 2. **Run the application:** | |
| ```bash | |
| python app.py | |
| ``` | |
| 3. **Access the interface:** | |
| - Open your browser to `http://localhost:7860` | |
| ### Usage | |
| 1. **Ingest Documents (Run this first or periodically to update):** | |
| - Add PDF files to the `pdfs/` folder | |
| - Edit `ingest_documents.py` and add your URLs to the `URLS` list | |
| - Run the ingestion script: | |
| ```bash | |
| py ingest_documents.py | |
| ``` | |
| - Wait for processing to complete (this creates/updates the vector store) | |
| 2. **Chat with Documents:** | |
| - Run the chatbot app: | |
| ```bash | |
| py app.py | |
| ``` | |
| - Open your browser to `http://localhost:7860` | |
| - Toggle "Use RAG" to enable/disable document retrieval | |
| - Ask questions about your ingested documents | |
| - The chatbot will retrieve relevant context and generate answers | |
| ## Deployment to Hugging Face Spaces | |
| ### Option 1: Using Hugging Face CLI | |
| 1. **Install Hugging Face CLI:** | |
| ```bash | |
| pip install huggingface_hub | |
| ``` | |
| 2. **Login to Hugging Face:** | |
| ```bash | |
| huggingface-cli login | |
| ``` | |
| 3. **Create a new Space:** | |
| - Go to https://huggingface.co/new-space | |
| - Choose a name and select "Gradio" as the SDK | |
| - Create the space | |
| 4. **Clone and push your code:** | |
| ```bash | |
| git clone https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME | |
| cd YOUR_SPACE_NAME | |
| # Copy your files here | |
| git add . | |
| git commit -m "Initial commit" | |
| git push | |
| ``` | |
| ### Option 2: Using Git | |
| 1. **Initialize git repository:** | |
| ```bash | |
| git init | |
| git add . | |
| git commit -m "Initial commit" | |
| ``` | |
| 2. **Add Hugging Face remote:** | |
| ```bash | |
| git remote add origin https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME | |
| git push -u origin main | |
| ``` | |
| ### Required Files for Hugging Face Spaces | |
| Your Space needs these files: | |
| - `app.py` - Main Gradio application | |
| - `requirements.txt` - Python dependencies | |
| - `README.md` - This file (optional but recommended) | |
| ### Optional: Add app.py to README | |
| For Hugging Face Spaces, you can also add a `app.py` reference in your README: | |
| ```yaml | |
| --- | |
| title: RAG Chatbot | |
| emoji: π€ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: gradio | |
| sdk_version: 4.0.0 | |
| app_file: app.py | |
| pinned: false | |
| --- | |
| ``` | |
| ## Configuration | |
| ### Setting Up Hugging Face Token (Required) | |
| The chatbot uses Hugging Face Inference API to access high-quality models. You need to set up an API token: | |
| 1. **Get your token:** | |
| - Go to https://huggingface.co/settings/tokens | |
| - Create a new token with "Read" permissions | |
| - Copy the token | |
| 2. **For local development:** | |
| - Set environment variable: `export HF_TOKEN=your_token_here` (Linux/Mac) | |
| - Or: `set HF_TOKEN=your_token_here` (Windows) | |
| - Or create a `.env` file with `HF_TOKEN=your_token_here` | |
| 3. **For Hugging Face Spaces:** | |
| - Go to your Space β Settings β Secrets | |
| - Add a new secret: Name = `HF_TOKEN`, Value = your token | |
| - The app will automatically use this token | |
| ### Chatbot Model and Finding Available Models | |
| The chatbot uses the Hugging Face Inference API. **Which models you can use depends on which providers you have enabled.** | |
| **How to see which models are available to you:** | |
| 1. **Browse models that support Inference API** | |
| - https://huggingface.co/inference/models β lists providers and models | |
| - https://huggingface.co/models?inference_provider=hf-inference β filter Hub models by βHF Inference APIβ | |
| 2. **Enable providers (required)** | |
| See **βHow to enable a provider and modelβ** below. | |
| 3. **Pick a chat model** | |
| - From the links above, choose a **text generation / chat** model thatβs supported by a provider you enabled. Note its **model id** (e.g. `meta-llama/Llama-3.2-1B-Instruct`). | |
| 4. **Use it in the app** | |
| - In `app.py`, pass that model id when creating the chatbot: | |
| ```python | |
| chatbot = RAGChatbot(model_name="meta-llama/Llama-3.2-1B-Instruct") # use an id you enabled | |
| ``` | |
| - The app also tries fallbacks (Phi-2, Zephyr, Qwen) by default; if none are available, enable a provider that supports at least one of them, or set `model_name` to a model you enabled as above. | |
| ### How to enable a provider and model | |
| 1. **Log in** to [Hugging Face](https://huggingface.co). | |
| 2. **Open Inference Provider settings** (one of these, depending on the current UI): | |
| - https://huggingface.co/settings/inference-providers | |
| - https://huggingface.co/settings/inference-api | |
| 3. **Enable a provider** | |
| - On that page youβll see a list of **providers** (e.g. Hugging Face, Together, Groq, etc.). | |
| - **Turn on** the provider that serves your model (e.g. **Together** for `ServiceNow-AI/Apriel-1.6-15b-Thinker:together`). | |
| - You can set the **order** of providers; βautoβ uses this order to pick which provider handles the request. | |
| 4. **Credits / billing** | |
| - Free accounts get a small amount of monthly credits; usage is deducted from that. | |
| - If you use a third-party provider (e.g. Together), you can either use HF-routed billing (credits on your HF account) or add a **custom provider API key** (e.g. Together API key) in the same settings so that provider is billed directly. | |
| 5. **Confirm the model** | |
| - Browse models for that provider: | |
| [Together models on the Hub](https://huggingface.co/models?inference_provider=together&sort=trending) | |
| - Open the model page (e.g. `ServiceNow-AI/Apriel-1.6-15b-Thinker`) and check the inference widget; if you see βTogetherβ and can run it, that model is available with your enabled provider. | |
| 6. **Use it in this app** | |
| - The app default is already `ServiceNow-AI/Apriel-1.6-15b-Thinker:together`. | |
| - Ensure **Together** is enabled in your Inference Provider settings and you have credits (or a Together API key). Then restart the app and send a message. | |
| ### Embedding Model | |
| The default embedding model is **all-mpnet-base-v2**, which provides high-quality embeddings for better retrieval. | |
| To change the embedding model, edit both `app.py` and `ingest_documents.py`: | |
| ```python | |
| # In app.py | |
| chatbot = RAGChatbot(embedding_model="all-mpnet-base-v2") | |
| # In ingest_documents.py | |
| ingestion = DocumentIngestion(embedding_model="all-mpnet-base-v2") | |
| ``` | |
| **Note:** If you change the embedding model, you must re-run `ingest_documents.py` to rebuild the vector store. | |
| ### Ingestion Parameters | |
| The ingestion system uses optimized parameters: | |
| - **Chunk size**: 600 characters (for precise retrieval) | |
| - **Chunk overlap**: 150 characters (to avoid cutting sentences) | |
| - **Retrieval count**: 5 chunks (for comprehensive context) | |
| These parameters are set in `ingestion.py` and can be adjusted if needed. | |
| ## Project Structure | |
| ``` | |
| . | |
| βββ app.py # Main Gradio chatbot application | |
| βββ ingest_documents.py # Standalone script to ingest PDFs and URLs | |
| βββ ingestion.py # Document ingestion and vector store module | |
| βββ requirements.txt # Python dependencies | |
| βββ README.md # This file | |
| βββ pdfs/ # Folder for PDF files (add your PDFs here) | |
| β βββ README.md | |
| βββ data/ | |
| βββ vector_store/ # Saved vector store (created after ingestion) | |
| βββ index.faiss | |
| βββ documents.pkl | |
| βββ embeddings.pkl | |
| ``` | |
| ## How It Works | |
| The chatbot uses **Retrieval-Augmented Generation (RAG)**: | |
| 1. **Document Ingestion**: PDFs and URLs are processed into chunks and embedded using sentence transformers | |
| 2. **Vector Search**: When you ask a question, the system searches for the most relevant document chunks | |
| 3. **Answer Generation**: The retrieved context is sent to Mistral-7B-Instruct via Inference API, which synthesizes a coherent answer based on the context | |
| This approach combines the accuracy of document retrieval with the natural language capabilities of a large language model. | |
| ## Limitations | |
| - Vector store is stored locally (not persistent on Hugging Face Spaces by default) | |
| - Large documents may take time to process | |
| - Some URLs may be blocked or require authentication | |
| - Requires HF_TOKEN for Inference API access (free tier available) | |
| - If you change embedding model or chunk parameters, you must re-run ingestion | |
| ## Troubleshooting | |
| ### Out of Memory Errors | |
| - Use smaller models | |
| - Reduce chunk size in `ingestion.py` | |
| - Process fewer documents at once | |
| ### URL Fetching Issues | |
| - Some websites block automated requests | |
| - Try different URLs or use PDF uploads instead | |
| ### Inference API Issues | |
| - Verify your `HF_TOKEN` is set correctly | |
| - Check that the token has "Read" permissions | |
| - Ensure you have API access (free tier available) | |
| - If you get rate limit errors, you may need to upgrade your Hugging Face account | |
| ### Ingestion Issues | |
| - If you changed embedding model or chunk parameters, re-run `ingest_documents.py` | |
| - Ensure you have enough disk space for the vector store | |
| - Large documents may take time to process | |
| ## License | |
| This project is open source and available under the MIT License. | |