crewAIInc/crewAI · error · ValueError

Unsupported vector database provider: '{provider}'. CrewAI R

Error message

Unsupported vector database provider: '{provider}'. CrewAI RAG currently supports: {', '.join(supported)}.

What it means

Raised when a RAG tool config specifies a vectordb provider outside the supported set. CrewAI RAG currently supports only 'chromadb' and 'qdrant'; any other string (or a typo) in config['vectordb']['provider'] fails fast with this ValueError instead of silently falling back to the default.

Source

Thrown at lib/crewai-tools/src/crewai_tools/tools/rag/rag_tool.py:207

        return self

    def _parse_config(self, config: RagToolConfig) -> Any:
        """Normalize the RagToolConfig into a provider-specific config object.

        Defaults to 'chromadb' with no extra provider config if none is supplied.
        """
        if not config:
            return self._create_provider_config("chromadb", {}, None)

        vectordb_cfg = cast(VectorDbConfig, config.get("vectordb", {}))
        provider: Literal["chromadb", "qdrant"] = vectordb_cfg.get(
            "provider", "chromadb"
        )
        provider_config: dict[str, Any] = vectordb_cfg.get("config", {})

        supported = ("chromadb", "qdrant")
        if provider not in supported:
            raise ValueError(
                f"Unsupported vector database provider: '{provider}'. "
                f"CrewAI RAG currently supports: {', '.join(supported)}."
            )

        embedding_spec: ProviderSpec | None = config.get("embedding_model")
        if embedding_spec:
            embedding_spec = cast(
                ProviderSpec, _validate_embedding_config(embedding_spec)
            )

        embedding_function = build_embedder(embedding_spec) if embedding_spec else None
        return self._create_provider_config(
            provider, provider_config, embedding_function
        )

    @staticmethod
    def _create_provider_config(
        provider: Literal["chromadb", "qdrant"],

View on GitHub (pinned to 754d7323be)

Solutions

  1. Change provider to 'chromadb' (zero-setup default) or 'qdrant' (self-hosted/cloud) matching your actual database
  2. Fix typos and casing — the comparison is case-sensitive against ('chromadb', 'qdrant')
  3. If you need another vector DB, request/contribute an adapter rather than passing its name
  4. For quick prototyping, omit the vectordb block entirely to get default chromadb

Example fix

# before
config = {'vectordb': {'provider': 'pinecone', 'config': {...}}}  # ValueError

# after
config = {'vectordb': {'provider': 'qdrant', 'config': {'url': 'http://localhost:6333'}}}
Defensive patterns

Strategy: type-guard

Validate before calling

SUPPORTED_VECTORDBS = {"chromadb", "qdrant"}

provider = config.get("vectordb", {}).get("provider", "chromadb")
assert provider in SUPPORTED_VECTORDBS, f"provider must be one of {SUPPORTED_VECTORDBS}"

Type guard

from typing import TypedDict, Literal

Provider = Literal["chromadb", "qdrant"]

def is_supported_provider(p: str) -> bool:
    return isinstance(p, str) and p in {"chromadb", "qdrant"}

Try / catch

try:
    tool = RAGTool(config=config)
except ValueError as e:
    if "Unsupported vector database provider" in str(e):
        config["vectordb"]["provider"] = "chromadb"  # explicit fallback decision
        tool = RAGTool(config=config)
    else:
        raise

Prevention

When it happens

Trigger: Passing config = {'vectordb': {'provider': 'pinecone', 'config': {...}}} or similar unsupported names, or misspelling 'qdrant'/'chromadb'. Note: when config is falsy/empty, chromadb is created by default and this error cannot occur.

Common situations: Assuming a popular vector DB (weaviate, milvus, pinecone, pgvector) is supported because embedder configs are pluggable; renaming after copy-pasting an example config; case sensitivity ('Qdrant' vs 'qdrant').

Related errors


AI-assisted analysis of crewAIInc/crewAI@754d7323be (2026-08-15). Data as JSON: /api/errors/7ba243dee98c8cd2. Report an issue: GitHub.