Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
268 changes: 268 additions & 0 deletions docs/docs/providers/vector_io/remote_mongodb.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
---
description: |
[MongoDB Atlas](https://www.mongodb.com/products/platform/atlas-vector-search) is a remote vector database provider for Llama Stack. It
uses MongoDB Atlas Vector Search to store and query vectors in the cloud.
That means you get enterprise-grade vector search with MongoDB's scalability and reliability.

## Features

- Cloud-native vector search with MongoDB Atlas
- Fully integrated with Llama Stack
- Enterprise-grade security and scalability
- Supports multiple search modes: vector, keyword, and hybrid search
- Built-in metadata filtering and text search capabilities
- Automatic index management

## Search Modes

MongoDB Atlas Vector Search supports three different search modes:

### Vector Search
Vector search uses MongoDB's `$vectorSearch` aggregation stage to perform semantic similarity search using embedding vectors.

```python
# Vector search example
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="What is machine learning?",
search_mode="vector",
max_num_results=5,
)
```

### Keyword Search
Keyword search uses MongoDB's text search capabilities with full-text indexes to find chunks containing specific terms.

```python
# Keyword search example
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="Python programming language",
search_mode="keyword",
max_num_results=5,
)
```

### Hybrid Search
Hybrid search combines both vector and keyword search methods using configurable reranking algorithms.

```python
# Hybrid search with RRF ranker (default)
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="neural networks in Python",
search_mode="hybrid",
max_num_results=5,
)

# Hybrid search with weighted ranker
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="neural networks in Python",
search_mode="hybrid",
max_num_results=5,
ranking_options={
"ranker": {
"type": "weighted",
"alpha": 0.7, # 70% vector search, 30% keyword search
}
},
)
```

## Usage

To use MongoDB Atlas in your Llama Stack project, follow these steps:

1. Create a MongoDB Atlas cluster with Vector Search enabled
2. Install the necessary dependencies
3. Configure your Llama Stack project to use MongoDB
4. Start storing and querying vectors

## Configuration

### Environment Variables
Set up the following environment variable for your MongoDB Atlas connection:

```bash
export MONGODB_CONNECTION_STRING="mongodb+srv://username:[email protected]/?retryWrites=true&w=majority&appName=llama-stack"
```

### Configuration Example

```yaml
vector_io:
- provider_id: mongodb_atlas
provider_type: remote::mongodb
config:
connection_string: "${env.MONGODB_CONNECTION_STRING}"
database_name: "llama_stack"
index_name: "vector_index"
similarity_metric: "cosine"
```

## Installation

You can install the MongoDB Python driver using pip:

```bash
pip install pymongo
```

## Documentation

See [MongoDB Atlas Vector Search documentation](https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/) for more details about MongoDB Atlas Vector Search.

For general MongoDB documentation, visit [MongoDB Documentation](https://docs.mongodb.com/).
sidebar_label: Remote - Mongodb
title: remote::mongodb
---

# remote::mongodb

## Description


[MongoDB Atlas](https://www.mongodb.com/products/platform/atlas-vector-search) is a remote vector database provider for Llama Stack. It
uses MongoDB Atlas Vector Search to store and query vectors in the cloud.
That means you get enterprise-grade vector search with MongoDB's scalability and reliability.

## Features

- Cloud-native vector search with MongoDB Atlas
- Fully integrated with Llama Stack
- Enterprise-grade security and scalability
- Supports multiple search modes: vector, keyword, and hybrid search
- Built-in metadata filtering and text search capabilities
- Automatic index management

## Search Modes

MongoDB Atlas Vector Search supports three different search modes:

### Vector Search
Vector search uses MongoDB's `$vectorSearch` aggregation stage to perform semantic similarity search using embedding vectors.

```python
# Vector search example
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="What is machine learning?",
search_mode="vector",
max_num_results=5,
)
```

### Keyword Search
Keyword search uses MongoDB's text search capabilities with full-text indexes to find chunks containing specific terms.

```python
# Keyword search example
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="Python programming language",
search_mode="keyword",
max_num_results=5,
)
```

### Hybrid Search
Hybrid search combines both vector and keyword search methods using configurable reranking algorithms.

```python
# Hybrid search with RRF ranker (default)
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="neural networks in Python",
search_mode="hybrid",
max_num_results=5,
)

# Hybrid search with weighted ranker
search_response = client.vector_stores.search(
vector_store_id=vector_store.id,
query="neural networks in Python",
search_mode="hybrid",
max_num_results=5,
ranking_options={
"ranker": {
"type": "weighted",
"alpha": 0.7, # 70% vector search, 30% keyword search
}
},
)
```

## Usage
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think part of this readme is duplicated.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the # Usage and # Configuration sections are duplicated.


To use MongoDB Atlas in your Llama Stack project, follow these steps:

1. Create a MongoDB Atlas cluster with Vector Search enabled
2. Install the necessary dependencies
3. Configure your Llama Stack project to use MongoDB
4. Start storing and querying vectors

## Configuration

### Environment Variables
Set up the following environment variable for your MongoDB Atlas connection:

```bash
export MONGODB_CONNECTION_STRING="mongodb+srv://username:[email protected]/?retryWrites=true&w=majority&appName=llama-stack"
```

### Configuration Example

```yaml
vector_io:
- provider_id: mongodb_atlas
provider_type: remote::mongodb
config:
connection_string: "${env.MONGODB_CONNECTION_STRING}"
database_name: "llama_stack"
index_name: "vector_index"
similarity_metric: "cosine"
```

## Installation

You can install the MongoDB Python driver using pip:

```bash
pip install pymongo
```

## Documentation

See [MongoDB Atlas Vector Search documentation](https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/) for more details about MongoDB Atlas Vector Search.

For general MongoDB documentation, visit [MongoDB Documentation](https://docs.mongodb.com/).


## Configuration

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `connection_string` | `<class 'str'>` | No | | MongoDB Atlas connection string (e.g., mongodb+srv://user:[email protected]/) |
| `database_name` | `<class 'str'>` | No | llama_stack | Database name to use for vector collections |
| `index_name` | `<class 'str'>` | No | vector_index | Name of the vector search index |
| `path_field` | `<class 'str'>` | No | embedding | Field name for storing embeddings |
| `similarity_metric` | `<class 'str'>` | No | cosine | Similarity metric: cosine, euclidean, or dotProduct |
| `max_pool_size` | `<class 'int'>` | No | 100 | Maximum connection pool size |
| `timeout_ms` | `<class 'int'>` | No | 30000 | Connection timeout in milliseconds |
| `persistence` | `llama_stack.core.storage.datatypes.KVStoreReference \| None` | No | | Config for KV store backend for metadata storage |

## Sample Configuration

```yaml
connection_string: ${env.MONGODB_CONNECTION_STRING:=}
database_name: ${env.MONGODB_DATABASE_NAME:=llama_stack}
index_name: ${env.MONGODB_INDEX_NAME:=vector_index}
path_field: ${env.MONGODB_PATH_FIELD:=embedding}
similarity_metric: ${env.MONGODB_SIMILARITY_METRIC:=cosine}
max_pool_size: ${env.MONGODB_MAX_POOL_SIZE:=100}
timeout_ms: ${env.MONGODB_TIMEOUT_MS:=30000}
persistence:
namespace: vector_io::mongodb_atlas
backend: kv_default
```
19 changes: 19 additions & 0 deletions llama_stack/providers/remote/vector_io/mongodb/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

from llama_stack.providers.datatypes import Api, ProviderSpec

from .config import MongoDBVectorIOConfig


async def get_adapter_impl(config: MongoDBVectorIOConfig, deps: dict[Api, ProviderSpec]):
from .mongodb import MongoDBVectorIOAdapter

# Handle the deps resolution - if files API exists, pass it, otherwise None
files_api = deps.get(Api.files)
impl = MongoDBVectorIOAdapter(config, deps[Api.inference], files_api)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need to add models_api

await impl.initialize()
return impl
66 changes: 66 additions & 0 deletions llama_stack/providers/remote/vector_io/mongodb/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

from typing import Any

from pydantic import BaseModel, Field

from llama_stack.providers.utils.kvstore.config import (
KVStoreConfig,
SqliteKVStoreConfig,
)
from llama_stack.schema_utils import json_schema_type


@json_schema_type
class MongoDBVectorIOConfig(BaseModel):
"""Configuration for MongoDB Atlas Vector Search provider.

This provider connects to MongoDB Atlas and uses Vector Search for RAG operations.
"""

# MongoDB Atlas connection details
connection_string: str = Field(
description="MongoDB Atlas connection string (e.g., mongodb+srv://user:[email protected]/)"
)
database_name: str = Field(default="llama_stack", description="Database name to use for vector collections")

# Vector search configuration
index_name: str = Field(default="vector_index", description="Name of the vector search index")
path_field: str = Field(default="embedding", description="Field name for storing embeddings")
similarity_metric: str = Field(
default="cosine",
description="Similarity metric: cosine, euclidean, or dotProduct",
)

# Connection options
max_pool_size: int = Field(default=100, description="Maximum connection pool size")
timeout_ms: int = Field(default=30000, description="Connection timeout in milliseconds")

# KV store configuration
kvstore: KVStoreConfig = Field(description="Config for KV store backend for metadata storage")

@classmethod
def sample_run_config(
cls,
__distro_dir__: str,
connection_string: str = "${env.MONGODB_CONNECTION_STRING:=}",
database_name: str = "${env.MONGODB_DATABASE_NAME:=llama_stack}",
**kwargs: Any,
) -> dict[str, Any]:
return {
"connection_string": connection_string,
"database_name": database_name,
"index_name": "${env.MONGODB_INDEX_NAME:=vector_index}",
"path_field": "${env.MONGODB_PATH_FIELD:=embedding}",
"similarity_metric": "${env.MONGODB_SIMILARITY_METRIC:=cosine}",
"max_pool_size": "${env.MONGODB_MAX_POOL_SIZE:=100}",
"timeout_ms": "${env.MONGODB_TIMEOUT_MS:=30000}",
"kvstore": SqliteKVStoreConfig.sample_run_config(
__distro_dir__=__distro_dir__,
db_name="mongodb_registry.db",
),
}
Loading
Loading