From 264e2b01fdc0f966fef66e90f6ac1d94dd369307 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 18:43:01 +0000 Subject: [PATCH] Address lint failures and improve exception handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove unused imports (os from rag_storage.py, pytest from test_memory_fallback.py) - Add specific exception handling in fallback mechanism (ConnectionError, ImportError, ValueError) - Add comprehensive logging to track embedding provider selection and fallback attempts - Resolves CI lint failures and addresses PR review feedback Co-Authored-By: João --- src/crewai/memory/storage/rag_storage.py | 1 - src/crewai/utilities/embedding_configurator.py | 15 +++++++++++++-- tests/test_memory_fallback.py | 1 - 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/crewai/memory/storage/rag_storage.py b/src/crewai/memory/storage/rag_storage.py index ae86b7081..5fa10c863 100644 --- a/src/crewai/memory/storage/rag_storage.py +++ b/src/crewai/memory/storage/rag_storage.py @@ -1,7 +1,6 @@ import contextlib import io import logging -import os import shutil import uuid from typing import Any, Dict, List, Optional diff --git a/src/crewai/utilities/embedding_configurator.py b/src/crewai/utilities/embedding_configurator.py index 261841df1..9a9a0a657 100644 --- a/src/crewai/utilities/embedding_configurator.py +++ b/src/crewai/utilities/embedding_configurator.py @@ -57,25 +57,36 @@ class EmbeddingConfigurator: def create_default_embedding_with_fallback(self) -> EmbeddingFunction: """Create an embedding function with fallback providers when OpenAI API key is not available.""" + import logging + logger = logging.getLogger(__name__) + if os.getenv("OPENAI_API_KEY"): + logger.info("Using OpenAI embeddings") return self._create_default_embedding_function() + logger.warning("OpenAI API key not found, attempting fallback providers") + try: + logger.info("Attempting Ollama embedding provider") return self.configure_embedder({ "provider": "ollama", "config": {"url": "http://localhost:11434/api/embeddings"}, "model": "nomic-embed-text" }) - except Exception: + except (ConnectionError, ImportError, ValueError) as e: + logger.warning(f"Ollama fallback failed: {str(e)}, trying HuggingFace") try: + logger.info("Attempting HuggingFace embedding provider") return self.configure_embedder({ "provider": "huggingface", "config": {"api_url": "https://api-inference.huggingface.co/pipeline/feature-extraction/sentence-transformers/all-MiniLM-L6-v2"} }) - except Exception: + except (ConnectionError, ImportError, ValueError) as e: + logger.warning(f"HuggingFace fallback failed: {str(e)}, using local SentenceTransformers") from chromadb.utils.embedding_functions.sentence_transformer_embedding_function import ( SentenceTransformerEmbeddingFunction, ) + logger.info("Using local SentenceTransformers embedding provider") return SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2") @staticmethod diff --git a/tests/test_memory_fallback.py b/tests/test_memory_fallback.py index 48aa7a868..e9c4bdc0f 100644 --- a/tests/test_memory_fallback.py +++ b/tests/test_memory_fallback.py @@ -1,5 +1,4 @@ import os -import pytest from unittest.mock import patch from crewai import Agent, Task, Crew, Process