crewAIInc/crewAI · error · RuntimeError

Failed to initialize {self.config.provider} embedding servic

Error message

Failed to initialize {self.config.provider} embedding service: {e}

What it means

The generic except in EmbeddingService initialization: build_embedder(config) ran but raised (invalid provider name, bad API key format caught at construction, unknown config keys, provider client instantiation failure). The service wraps it as RuntimeError naming the provider, and logs the underlying error before raising. The chained exception carries the root cause.

Source

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

            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,
                **self.config.extra_config,
            }
        elif self.config.provider == "azure":
            base_config["config"] = {
                "api_key": self.config.api_key,
                "model_name": self.config.model,

View on GitHub (pinned to 754d7323be)

Solutions

  1. Check the logged error / e.__cause__ for the factory's specific complaint
  2. Verify the provider string against crewai's supported providers (exact spelling, e.g. 'openai')
  3. Pass required credentials in config (api_key) and correct per-provider keys (model_name etc.)
  4. Upgrade crewai-tools and crewai in lockstep so the config schema matches

Example fix

# before
svc = EmbeddingService(config=EmbeddingConfig(provider='open_ai', model='text-embedding-3-small'))
# after
svc = EmbeddingService(config=EmbeddingConfig(provider='openai', model='text-embedding-3-small', api_key=os.environ['OPENAI_API_KEY']))
Defensive patterns

Strategy: validation

Validate before calling

KNOWN_PROVIDERS = {'openai', 'google', 'cohere', 'azure', 'vertexai', 'ollama', 'anthropic', 'huggingface'}
if cfg.provider not in KNOWN_PROVIDERS:
    raise ValueError(f'unknown embedding provider: {cfg.provider}')
if cfg.provider == 'openai' and not (cfg.api_key or os.getenv('OPENAI_API_KEY')):
    raise ValueError('OPENAI_API_KEY not set')

Type guard

def is_known_provider(p: str) -> bool:
    return p in KNOWN_PROVIDERS

Try / catch

try:
    svc = EmbeddingService(config=cfg)
except RuntimeError as e:
    logger.error('embedder init failed: %s', e.__cause__)
    raise

Prevention

When it happens

Trigger: config.provider set to a string build_embedder doesn't recognize (typo like 'open_ai' vs 'openai'); missing required provider config (api_key None passed to a client that validates); incompatible provider config schema after a crewai upgrade changed the factory's expected keys.

Common situations: Config-driven provider selection with typos; switching embedding providers (openai, gemini, cohere, etc.) while reusing the wrong config keys; crewai version changes to the embedder factory schema.

Related errors


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