|
--- |
|
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 |