From 498e8dc6e8e6ee00c1864ba278548111fd4d9118 Mon Sep 17 00:00:00 2001 From: Vidit Ostwal <110953813+Vidit-Ostwal@users.noreply.github.com> Date: Wed, 30 Jul 2025 19:31:17 +0530 Subject: [PATCH] Changed the import error to show missing module files (#2423) * Fix issue #2421: Handle missing google.genai dependency gracefully Co-Authored-By: Joe Moura * Fix import sorting in test file Co-Authored-By: Joe Moura * Fix import sorting with ruff Co-Authored-By: Joe Moura * Removed unwatned test case * Added dynamic catching for all the embedder function * Dropped the comment * Added test case * Fixed Linting Issue * Flaky test case in 3.13 * Test Case fixed --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura Co-authored-by: Lucas Gomide --- src/crewai/rag/embeddings/configurator.py | 9 ++++++- .../utilities/test_embedding_configuration.py | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tests/utilities/test_embedding_configuration.py 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()