From 7a20da59ee63496b2332101506ecc5009d7da29d Mon Sep 17 00:00:00 2001 From: Prithvi Monangi Date: Thu, 2 Apr 2026 05:35:54 -0700 Subject: [PATCH] fix(configs): add missing ConfigDict to vector store configs (#4656) Co-authored-by: kartik-mem0 --- mem0/configs/vector_stores/elasticsearch.py | 4 ++- mem0/configs/vector_stores/mongodb.py | 4 ++- mem0/configs/vector_stores/neptune.py | 6 ++-- mem0/configs/vector_stores/opensearch.py | 4 ++- mem0/configs/vector_stores/pgvector.py | 4 ++- mem0/configs/vector_stores/supabase.py | 4 ++- mem0/configs/vector_stores/valkey.py | 36 +++++++++++++++------ 7 files changed, 43 insertions(+), 19 deletions(-) diff --git a/mem0/configs/vector_stores/elasticsearch.py b/mem0/configs/vector_stores/elasticsearch.py index ed12d8625..6044383cc 100644 --- a/mem0/configs/vector_stores/elasticsearch.py +++ b/mem0/configs/vector_stores/elasticsearch.py @@ -1,7 +1,7 @@ from collections.abc import Callable from typing import Any, Dict, List, Optional -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel, ConfigDict, Field, model_validator class ElasticsearchConfig(BaseModel): @@ -63,3 +63,5 @@ class ElasticsearchConfig(BaseModel): f"Please input only the following fields: {', '.join(allowed_fields)}" ) return values + + model_config = ConfigDict(arbitrary_types_allowed=True) diff --git a/mem0/configs/vector_stores/mongodb.py b/mem0/configs/vector_stores/mongodb.py index 36f0c0fd4..b1dda256e 100644 --- a/mem0/configs/vector_stores/mongodb.py +++ b/mem0/configs/vector_stores/mongodb.py @@ -1,6 +1,6 @@ from typing import Any, Dict, Optional -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel, ConfigDict, Field, model_validator class MongoDBConfig(BaseModel): @@ -23,3 +23,5 @@ class MongoDBConfig(BaseModel): f"Please provide only the following fields: {', '.join(allowed_fields)}." ) return values + + model_config = ConfigDict(arbitrary_types_allowed=False) diff --git a/mem0/configs/vector_stores/neptune.py b/mem0/configs/vector_stores/neptune.py index 03ab3249e..06132f9ac 100644 --- a/mem0/configs/vector_stores/neptune.py +++ b/mem0/configs/vector_stores/neptune.py @@ -5,7 +5,7 @@ This module provides configuration settings for integrating with Amazon Neptune as a vector store backend for Mem0's memory layer. """ -from pydantic import BaseModel, Field +from pydantic import BaseModel, ConfigDict, Field class NeptuneAnalyticsConfig(BaseModel): @@ -22,6 +22,4 @@ class NeptuneAnalyticsConfig(BaseModel): collection_name: str = Field("mem0", description="Default name for the collection") endpoint: str = Field("endpoint", description="Graph ID for the runtime") - model_config = { - "arbitrary_types_allowed": False, - } + model_config = ConfigDict(arbitrary_types_allowed=False) diff --git a/mem0/configs/vector_stores/opensearch.py b/mem0/configs/vector_stores/opensearch.py index 05681b9bf..9b4ce3455 100644 --- a/mem0/configs/vector_stores/opensearch.py +++ b/mem0/configs/vector_stores/opensearch.py @@ -1,6 +1,6 @@ from typing import Any, Dict, Optional, Type, Union -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel, ConfigDict, Field, model_validator class OpenSearchConfig(BaseModel): @@ -39,3 +39,5 @@ class OpenSearchConfig(BaseModel): f"Extra fields not allowed: {', '.join(extra_fields)}. Allowed fields: {', '.join(allowed_fields)}" ) return values + + model_config = ConfigDict(arbitrary_types_allowed=True) diff --git a/mem0/configs/vector_stores/pgvector.py b/mem0/configs/vector_stores/pgvector.py index 66c331d3d..f266cb9ab 100644 --- a/mem0/configs/vector_stores/pgvector.py +++ b/mem0/configs/vector_stores/pgvector.py @@ -1,6 +1,6 @@ from typing import Any, Dict, Optional -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel, ConfigDict, Field, model_validator class PGVectorConfig(BaseModel): @@ -50,3 +50,5 @@ class PGVectorConfig(BaseModel): f"Extra fields not allowed: {', '.join(extra_fields)}. Please input only the following fields: {', '.join(allowed_fields)}" ) return values + + model_config = ConfigDict(arbitrary_types_allowed=True) diff --git a/mem0/configs/vector_stores/supabase.py b/mem0/configs/vector_stores/supabase.py index 248fc729e..4248c1126 100644 --- a/mem0/configs/vector_stores/supabase.py +++ b/mem0/configs/vector_stores/supabase.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Any, Dict, Optional -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel, ConfigDict, Field, model_validator class IndexMethod(str, Enum): @@ -42,3 +42,5 @@ class SupabaseConfig(BaseModel): f"Extra fields not allowed: {', '.join(extra_fields)}. Please input only the following fields: {', '.join(allowed_fields)}" ) return values + + model_config = ConfigDict(arbitrary_types_allowed=False) diff --git a/mem0/configs/vector_stores/valkey.py b/mem0/configs/vector_stores/valkey.py index 1c04049e6..595110882 100644 --- a/mem0/configs/vector_stores/valkey.py +++ b/mem0/configs/vector_stores/valkey.py @@ -1,15 +1,31 @@ -from pydantic import BaseModel +from typing import Any, Dict + +from pydantic import BaseModel, ConfigDict, Field, model_validator class ValkeyConfig(BaseModel): """Configuration for Valkey vector store.""" - valkey_url: str - collection_name: str - embedding_model_dims: int - timezone: str = "UTC" - index_type: str = "hnsw" # Default to HNSW, can be 'hnsw' or 'flat' - # HNSW specific parameters with recommended defaults - hnsw_m: int = 16 # Number of connections per layer (default from Valkey docs) - hnsw_ef_construction: int = 200 # Search width during construction - hnsw_ef_runtime: int = 10 # Search width during queries + valkey_url: str = Field(..., description="Valkey server URL (e.g., redis://localhost:6379)") + collection_name: str = Field(..., description="Name of the index / collection") + embedding_model_dims: int = Field(..., description="Dimensions of the embedding model") + timezone: str = Field("UTC", description="Timezone for timestamp handling") + index_type: str = Field("hnsw", description="Index type: 'hnsw' (default) or 'flat'") + hnsw_m: int = Field(16, description="HNSW: number of connections per layer") + hnsw_ef_construction: int = Field(200, description="HNSW: search width during index construction") + hnsw_ef_runtime: int = Field(10, description="HNSW: search width during queries") + + @model_validator(mode="before") + @classmethod + def validate_extra_fields(cls, values: Dict[str, Any]) -> Dict[str, Any]: + allowed_fields = set(cls.model_fields.keys()) + input_fields = set(values.keys()) + extra_fields = input_fields - allowed_fields + if extra_fields: + raise ValueError( + f"Extra fields not allowed: {', '.join(extra_fields)}. " + f"Please input only the following fields: {', '.join(allowed_fields)}" + ) + return values + + model_config = ConfigDict(arbitrary_types_allowed=False)