mem0ai/mem0 · error · ValueError

Unsupported vector store provider: {provider}

Error message

Unsupported vector store provider: {provider}

What it means

ValueError from VectorStoreConfig's model_validator (mem0/vector_stores/configs.py) when self.provider is not a key in _provider_configs. The validator is the dispatcher that dynamically imports mem0.configs.vector_stores.<provider>, so an unknown or misspelled provider name aborts config construction before any backend is touched.

Source

Thrown at mem0/vector_stores/configs.py:47

        "elasticsearch": "ElasticsearchConfig",
        "vertex_ai_vector_search": "GoogleMatchingEngineConfig",
        "opensearch": "OpenSearchConfig",
        "supabase": "SupabaseConfig",
        "weaviate": "WeaviateConfig",
        "faiss": "FAISSConfig",
        "langchain": "LangchainConfig",
        "s3_vectors": "S3VectorsConfig",
        "turbopuffer": "TurbopufferConfig",
        "oracledb": "OracleAIVectorSearchConfig",
    }

    @model_validator(mode="after")
    def validate_and_create_config(self) -> "VectorStoreConfig":
        provider = self.provider
        config = self.config

        if provider not in self._provider_configs:
            raise ValueError(f"Unsupported vector store provider: {provider}")

        module = __import__(
            f"mem0.configs.vector_stores.{provider}",
            fromlist=[self._provider_configs[provider]],
        )
        config_class = getattr(module, self._provider_configs[provider])

        if config is None:
            config = {}

        if not isinstance(config, dict):
            if not isinstance(config, config_class):
                raise ValueError(f"Invalid config type for provider {provider}")
            return self

        # also check if path in allowed kays for pydantic model, and whether config extra fields are allowed
        if "path" not in config and "path" in config_class.__annotations__:
            config["path"] = f"/tmp/{provider}"

View on GitHub (pinned to 001c235229)

Solutions

  1. Correct the provider string to match a key of VectorStoreConfig._provider_configs exactly (lowercase snake_case, e.g. 'qdrant', 'chroma', 'azure_mysql').
  2. Print valid providers in your setup: from mem0.vector_stores.configs import VectorStoreConfig; print(VectorStoreConfig._provider_configs.keys()).
  3. Validate provider names against that mapping in config-loading code and fail with a clear message at startup.

Example fix

# before
config = {"vector_store": {"provider": "qdrant ", "config": {...}}}  # trailing space -> ValueError

# after
config = {"vector_store": {"provider": "qdrant", "config": {...}}}
Defensive patterns

Strategy: validation

Validate before calling

from mem0.vector_stores.configs import VectorStoreConfig

SUPPORTED_PROVIDERS = set(VectorStoreConfig._provider_configs)

if cfg_provider not in SUPPORTED_PROVIDERS:
    raise ValueError(f"provider {cfg_provider!r} unsupported; choose from {sorted(SUPPORTED_PROVIDERS)}")

vector_store_config = VectorStoreConfig(provider=cfg_provider, config=cfg)

Type guard

def is_supported_vector_store_provider(p) -> bool:
    from mem0.vector_stores.configs import VectorStoreConfig
    return isinstance(p, str) and p in VectorStoreConfig._provider_configs

Prevention

When it happens

Trigger: Building MemoryConfig with vector_store={'provider': 'qdrnat'} (typo), a provider name with wrong casing ('Chroma'), or a genuinely unsupported backend name. Also triggered by passing an empty or None provider where the default does not match the mapping.

Common situations: Typos in YAML/JSON/ENV-driven config; upgrading mem0 where a provider was renamed or removed; copy-pasting a provider string from docs of a newer/older version than the installed one.

Related errors


AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15). Data as JSON: /api/errors/428646ba34908020. Report an issue: GitHub.