Spaces:
Sleeping
Sleeping
| license: agpl-3.0 | |
| sdk: gradio | |
| # Vector Search Demo App | |
| This is a Gradio web application that demonstrates vector search capabilities using MongoDB Atlas and OpenAI embeddings. | |
| ## Prerequisites | |
| 1. MongoDB Atlas account with vector search enabled | |
| 2. OpenAI API key | |
| 3. Python 3.8+ | |
| 4. Sample movie data loaded in MongoDB Atlas (sample_mflix database) | |
| ## Setup | |
| 1. Clone this repository | |
| 2. Install dependencies: | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| 3. Set up environment variables: | |
| ```bash | |
| export OPENAI_API_KEY="your-openai-api-key" | |
| export ATLAS_URI="your-mongodb-atlas-connection-string" | |
| ``` | |
| 4. Ensure your MongoDB Atlas setup: | |
| - Database name: sample_mflix | |
| - Collection: embedded_movies | |
| - Vector search index: idx_plot_embedding | |
| - Index configuration: | |
| ```json | |
| { | |
| "fields": [ | |
| { | |
| "type": "vector", | |
| "path": "plot_embedding", | |
| "numDimensions": 1536, | |
| "similarity": "dotProduct" | |
| } | |
| ] | |
| } | |
| ``` | |
| ## Running the App | |
| Start the application: | |
| ```bash | |
| python app.py | |
| ``` | |
| The app will be available at http://localhost:7860 | |
| ## Usage | |
| ### Generating Embeddings | |
| 1. Select your database and collection from the dropdowns | |
| 2. Choose the field to generate embeddings for | |
| 3. Specify the embedding field name (defaults to "embedding") | |
| 4. Set a document limit (0 for all documents) | |
| 5. Click "Generate Embeddings" to start processing | |
| The app uses memory-efficient cursor-based batch processing that can handle large collections: | |
| - Documents are processed in batches (default 20 documents per batch) | |
| - Memory usage is optimized through cursor-based iteration | |
| - Real-time progress tracking shows completed/total documents | |
| - Supports processing of large collections (100,000+ documents) | |
| - Automatically resumes from where it left off if embeddings already exist | |
| ### Searching | |
| 1. Enter a natural language query in the text box (e.g., "humans fighting aliens") | |
| 2. Click "Submit" to search | |
| 3. View the results showing matching documents with their similarity scores | |
| ## Example Queries | |
| - "humans fighting aliens" | |
| - "relationship drama between two good friends" | |
| - "comedy about family vacation" | |
| - "detective solving mysterious murder" | |
| ## Performance Notes | |
| The application is optimized for handling large datasets: | |
| - Uses cursor-based batch processing to avoid memory issues | |
| - Processes documents in configurable batch sizes (default: 20) | |
| - Implements parallel processing with ThreadPoolExecutor | |
| - Provides real-time progress tracking | |
| - Automatically handles memory cleanup during processing | |
| - Supports resuming interrupted operations | |
| ## Notes | |
| - The search uses OpenAI's text-embedding-ada-002 model to create embeddings | |
| - Results are limited to top 5 matches | |
| - Similarity scores range from 0 to 1, with higher scores indicating better matches |