diff --git a/docs/docs/providers/vector_io/remote_mongodb.mdx b/docs/docs/providers/vector_io/remote_mongodb.mdx index 8e23919b3..8564e1a5e 100644 --- a/docs/docs/providers/vector_io/remote_mongodb.mdx +++ b/docs/docs/providers/vector_io/remote_mongodb.mdx @@ -243,7 +243,7 @@ For general MongoDB documentation, visit [MongoDB Documentation](https://docs.mo | Field | Type | Required | Default | Description | |-------|------|----------|---------|-------------| -| `connection_string` | `` | No | | MongoDB Atlas connection string (e.g., mongodb+srv://user:pass@cluster.mongodb.net/) | +| `connection_string` | `str \| None` | No | | MongoDB Atlas connection string (e.g., mongodb+srv://user:pass@cluster.mongodb.net/) | | `database_name` | `` | No | llama_stack | Database name to use for vector collections | | `index_name` | `` | No | vector_index | Name of the vector search index | | `path_field` | `` | No | embedding | Field name for storing embeddings | diff --git a/src/llama_stack/providers/remote/vector_io/mongodb/__init__.py b/src/llama_stack/providers/remote/vector_io/mongodb/__init__.py index 6388c647e..d209fa3e2 100644 --- a/src/llama_stack/providers/remote/vector_io/mongodb/__init__.py +++ b/src/llama_stack/providers/remote/vector_io/mongodb/__init__.py @@ -14,6 +14,7 @@ async def get_adapter_impl(config: MongoDBVectorIOConfig, deps: dict[Api, Provid # 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) + models_api = deps.get(Api.models) + impl = MongoDBVectorIOAdapter(config, deps[Api.inference], files_api, models_api) await impl.initialize() return impl diff --git a/src/llama_stack/providers/remote/vector_io/mongodb/config.py b/src/llama_stack/providers/remote/vector_io/mongodb/config.py index 65ed82592..c94bf70e6 100644 --- a/src/llama_stack/providers/remote/vector_io/mongodb/config.py +++ b/src/llama_stack/providers/remote/vector_io/mongodb/config.py @@ -20,8 +20,9 @@ class MongoDBVectorIOConfig(BaseModel): """ # MongoDB Atlas connection details - connection_string: str = Field( - description="MongoDB Atlas connection string (e.g., mongodb+srv://user:pass@cluster.mongodb.net/)" + connection_string: str | None = Field( + default=None, + description="MongoDB Atlas connection string (e.g., mongodb+srv://user:pass@cluster.mongodb.net/)", ) database_name: str = Field(default="llama_stack", description="Database name to use for vector collections") diff --git a/src/llama_stack/providers/remote/vector_io/mongodb/mongodb.py b/src/llama_stack/providers/remote/vector_io/mongodb/mongodb.py index 275414746..76a77746a 100644 --- a/src/llama_stack/providers/remote/vector_io/mongodb/mongodb.py +++ b/src/llama_stack/providers/remote/vector_io/mongodb/mongodb.py @@ -215,7 +215,7 @@ class MongoDBIndex(EmbeddingIndex): "index": self.config.index_name, "queryVector": embedding.tolist(), "path": self.config.path_field, - "numCandidates": k * 10, # Get more candidates for better results + "numCandidates": min(k * 10, 1000), # Cap at 1000 to prevent excessive candidates "limit": k, } }, @@ -398,12 +398,14 @@ class MongoDBVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStoresProto config: MongoDBVectorIOConfig, inference_api, files_api=None, + models_api=None, ) -> None: # Handle the case where files_api might be a ProviderSpec that needs resolution resolved_files_api = files_api super().__init__(files_api=resolved_files_api, kvstore=None) self.config = config self.inference_api = inference_api + self.models_api = models_api self.client: MongoClient | None = None self.database: Database | None = None self.cache: dict[str, VectorStoreWithIndex] = {} @@ -418,6 +420,13 @@ class MongoDBVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStoresProto if self.config.persistence: self.kvstore = await kvstore_impl(self.config.persistence) + # Validate connection string + if not self.config.connection_string: + raise ValueError( + "MongoDB connection_string is required but not provided. " + "Please set MONGODB_CONNECTION_STRING environment variable or provide it in config." + ) + # Connect to MongoDB with optimized settings for RAG self.client = MongoClient( self.config.connection_string,