crewAIInc/crewAI · error · ImportError

CrewAI embedding providers not available. Make sure crewai i

Error message

CrewAI embedding providers not available. Make sure crewai is installed: {e}

What it means

EmbeddingService._initialize_embedding_function imports crewai.rag.embeddings.factory.build_embedder to construct the provider embedding function; if that import fails because the main crewai package (or its embedding subpackage) is missing or too old to contain it, an ImportError with this message is raised. crewai-tools depends on the host crewai package for the actual provider implementations.

Source

Thrown at lib/crewai-tools/src/crewai_tools/rag/embedding_service.py:126

            return os.getenv(env_key)
        return None

    def _initialize_embedding_function(self) -> None:
        """Initialize the embedding function using CrewAI's factory."""
        try:
            from crewai.rag.embeddings.factory import build_embedder

            config = self._build_provider_config()

            self._embedding_function = build_embedder(config)

            logger.info(
                f"Initialized {self.config.provider} embedding service with model "
                f"{self.config.model}"
            )

        except ImportError as e:
            raise ImportError(
                f"CrewAI embedding providers not available. "
                f"Make sure crewai is installed: {e}"
            ) from e
        except Exception as e:
            logger.error(f"Failed to initialize embedding function: {e}")
            raise RuntimeError(
                f"Failed to initialize {self.config.provider} embedding service: {e}"
            ) from e

    def _build_provider_config(self) -> dict[str, Any]:
        """Build configuration dictionary for CrewAI's embedding factory."""
        base_config = {"provider": self.config.provider, "config": {}}

        # Provider-specific configuration mapping
        if self.config.provider == "openai":
            base_config["config"] = {
                "api_key": self.config.api_key,
                "model_name": self.config.model,

View on GitHub (pinned to 754d7323be)

Solutions

  1. Install/upgrade crewai: uv add crewai (pip install -U crewai) to a version containing crewai.rag.embeddings.factory
  2. Align versions: upgrade crewai-tools and crewai together so the factory API matches
  3. Check for a local file/dir named crewai.py or crewai/ shadowing the package
  4. Verify: python -c "from crewai.rag.embeddings.factory import build_embedder"

Example fix

# before: EmbeddingService(...) raises ImportError at init
# after (shell):
# uv add 'crewai>=0.80' crewai-tools
# python -c "from crewai.rag.embeddings.factory import build_embedder; print('ok')"
Defensive patterns

Strategy: validation

Validate before calling

try:
    from crewai.rag.embeddings.factory import build_embedder  # noqa: F401
except ImportError as e:
    raise SystemExit('crewai embedding factory unavailable: uv add -U crewai') from e

Try / catch

try:
    svc = EmbeddingService(config=cfg)
except ImportError as e:
    raise SystemExit('upgrade crewai to a version with rag.embeddings.factory') from e

Prevention

When it happens

Trigger: Installing crewai-tools without the crewai package; an old crewai version predating crewai.rag.embeddings.factory; shadowing by a local 'crewai' module/package; broken environment where crewai imports but its rag submodule does not.

Common situations: Standalone use of crewai_tools.rag in a project that never installed crewai; version mismatch after upgrading one package but not the other; pip resolving an incompatible crewai version.

Related errors


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