{"record":{"id":"94823bd2ee5155b3","repo":"mem0ai/mem0","slug":"invalid-config-type-for-provider-provider","errorCode":null,"errorMessage":"Invalid config type for provider {provider}","messagePattern":"Invalid config type for provider (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mem0/vector_stores/configs.py","lineNumber":60,"sourceCode":"    def validate_and_create_config(self) -> \"VectorStoreConfig\":\n        provider = self.provider\n        config = self.config\n\n        if provider not in self._provider_configs:\n            raise ValueError(f\"Unsupported vector store provider: {provider}\")\n\n        module = __import__(\n            f\"mem0.configs.vector_stores.{provider}\",\n            fromlist=[self._provider_configs[provider]],\n        )\n        config_class = getattr(module, self._provider_configs[provider])\n\n        if config is None:\n            config = {}\n\n        if not isinstance(config, dict):\n            if not isinstance(config, config_class):\n                raise ValueError(f\"Invalid config type for provider {provider}\")\n            return self\n\n        # also check if path in allowed kays for pydantic model, and whether config extra fields are allowed\n        if \"path\" not in config and \"path\" in config_class.__annotations__:\n            config[\"path\"] = f\"/tmp/{provider}\"\n\n        self.config = config_class(**config)\n        return self\n","sourceCodeStart":42,"sourceCodeEnd":69,"githubUrl":"https://github.com/mem0ai/mem0/blob/001c235229be8795e3834520467bd0d661ed8f34/mem0/vector_stores/configs.py#L42-L69","documentation":"ValueError from the same VectorStoreConfig validator when config is neither a dict nor an instance of the provider's pydantic config class (e.g. QdrantConfig). The validator accepts a plain dict (coerced into the config class) or an already-constructed config object of exactly the right type; anything else — including a config object built for a DIFFERENT provider — is rejected.","triggerScenarios":"Passing vector_store={'provider': 'chroma', 'config': QdrantConfig(...)} (mismatched provider/config class), config='some string', config=[...], or a custom dataclass instead of the provider's config class or a dict.","commonSituations":"Switching the provider string in config but forgetting to change the config object; wrapping config in nested dicts of the wrong shape; passing an OSS MemoryConfig instance where a provider-specific config is expected.","solutions":["Pass config as a plain dict of the provider's fields: {'provider': 'qdrant', 'config': {'host': ..., 'collection_name': ...}}.","Or pass an instance of the exact matching class, e.g. from mem0.configs.vector_stores.qdrant import QdrantConfig; QdrantConfig(...).","Keep provider and config class in one place (single source of truth) so they cannot drift apart."],"exampleFix":"# before\nMemoryConfig(vector_store=VectorStoreConfig(provider=\"elasticsearch\", config=ChromaConfig(...)))\n\n# after\nMemoryConfig(vector_store=VectorStoreConfig(provider=\"elasticsearch\", config={\"host\": \"localhost\", \"port\": 9200}))","handlingStrategy":"type-guard","validationCode":"def build_vector_store_config(provider: str, config):\n    if isinstance(config, dict):\n        return VectorStoreConfig(provider=provider, config=dict(config))\n    from mem0.vector_stores.configs import VectorStoreConfig\n    cls_name = VectorStoreConfig._provider_configs[provider]\n    import importlib\n    cls = getattr(importlib.import_module(f\"mem0.configs.vector_stores.{provider}\"), cls_name)\n    if not isinstance(config, cls):\n        raise TypeError(f\"config for {provider} must be a dict or {cls.__name__}\")\n    return VectorStoreConfig(provider=provider, config=config)","typeGuard":"def is_valid_provider_config(provider: str, config) -> bool:\n    import importlib\n    from mem0.vector_stores.configs import VectorStoreConfig\n    if isinstance(config, dict):\n        return True\n    try:\n        cls = getattr(importlib.import_module(f\"mem0.configs.vector_stores.{provider}\"),\n                      VectorStoreConfig._provider_configs[provider])\n        return isinstance(config, cls)\n    except (KeyError, ModuleNotFoundError):\n        return False","tryCatchPattern":null,"preventionTips":["Default to plain dicts for provider config; let pydantic validate field names and types.","Keep the provider string and its config object generated from one code path so they cannot diverge.","Add unit tests asserting your config dict constructs successfully for each provider you ship."],"tags":["config","validation","pydantic","vector-store"],"backgroundTag":null,"analyzedSha":"001c235229be8795e3834520467bd0d661ed8f34","analyzedAt":"2026-08-15T01:55:42.685Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}