diff --git a/src/crewai/rag/embeddings/configurator.py b/src/crewai/rag/embeddings/configurator.py index e523b60f0..ae2f120d8 100644 --- a/src/crewai/rag/embeddings/configurator.py +++ b/src/crewai/rag/embeddings/configurator.py @@ -38,7 +38,14 @@ class EmbeddingConfigurator: f"Unsupported embedding provider: {provider}, supported providers: {list(self.embedding_functions.keys())}" ) - embedding_function = self.embedding_functions[provider] + try: + embedding_function = self.embedding_functions[provider] + except ImportError as e: + missing_package = str(e).split()[-1] + raise ImportError( + f"{missing_package} is not installed. Please install it with: pip install {missing_package}" + ) + return ( embedding_function(config) if provider == "custom" diff --git a/tests/utilities/test_embedding_configuration.py b/tests/utilities/test_embedding_configuration.py new file mode 100644 index 000000000..2de8cd301 --- /dev/null +++ b/tests/utilities/test_embedding_configuration.py @@ -0,0 +1,25 @@ +from unittest.mock import patch + +import pytest + +from crewai.rag.embeddings.configurator import EmbeddingConfigurator + + +def test_configure_embedder_importerror(): + configurator = EmbeddingConfigurator() + + embedder_config = { + 'provider': 'openai', + 'config': { + 'model': 'text-embedding-ada-002', + } + } + + with patch('chromadb.utils.embedding_functions.openai_embedding_function.OpenAIEmbeddingFunction') as mock_openai: + mock_openai.side_effect = ImportError("Module not found.") + + with pytest.raises(ImportError) as exc_info: + configurator.configure_embedder(embedder_config) + + assert str(exc_info.value) == "Module not found." + mock_openai.assert_called_once()