mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-08 15:48:29 +00:00
Fix Python 3.11 validation test failures: Remove global logger state and improve error handling
- Remove global _litellm_logger variable that could interfere with exception propagation - Add proper error handling around logger.setLevel() operations - Update tests to reflect removal of global caching - Ensure context manager is fully isolated and doesn't affect validation methods Co-Authored-By: João <joao@crewai.com>
This commit is contained in:
@@ -201,16 +201,11 @@ def suppress_warnings():
|
||||
yield
|
||||
|
||||
|
||||
_litellm_logger = None
|
||||
|
||||
@contextmanager
|
||||
def suppress_litellm_output():
|
||||
"""Contextually suppress litellm-related logging output during LLM calls."""
|
||||
global _litellm_logger
|
||||
if _litellm_logger is None:
|
||||
_litellm_logger = logging.getLogger("litellm")
|
||||
|
||||
original_level = _litellm_logger.level
|
||||
litellm_logger = logging.getLogger("litellm")
|
||||
original_level = litellm_logger.level
|
||||
|
||||
warning_patterns = [
|
||||
".*give feedback.*",
|
||||
@@ -224,14 +219,18 @@ def suppress_litellm_output():
|
||||
for pattern in warning_patterns:
|
||||
warnings.filterwarnings("ignore", message=pattern)
|
||||
|
||||
_litellm_logger.setLevel(logging.WARNING)
|
||||
try:
|
||||
litellm_logger.setLevel(logging.WARNING)
|
||||
except Exception as e:
|
||||
logging.debug(f"Error setting logger level: {e}")
|
||||
|
||||
yield
|
||||
except Exception as e:
|
||||
logging.debug(f"Error in litellm output suppression: {e}")
|
||||
raise
|
||||
finally:
|
||||
try:
|
||||
_litellm_logger.setLevel(original_level)
|
||||
litellm_logger.setLevel(original_level)
|
||||
except Exception as e:
|
||||
logging.debug(f"Error restoring logger level: {e}")
|
||||
|
||||
|
||||
@@ -136,28 +136,22 @@ def test_concurrent_llm_calls():
|
||||
assert all("test response" in result for result in results)
|
||||
|
||||
|
||||
def test_logger_caching_performance():
|
||||
"""Test that logger instance is cached for performance."""
|
||||
def test_logger_performance():
|
||||
"""Test that logger operations work correctly without global caching."""
|
||||
from crewai.llm import suppress_litellm_output
|
||||
import crewai.llm
|
||||
|
||||
original_logger = crewai.llm._litellm_logger
|
||||
crewai.llm._litellm_logger = None
|
||||
|
||||
try:
|
||||
with patch('logging.getLogger') as mock_get_logger:
|
||||
mock_logger = MagicMock()
|
||||
mock_get_logger.return_value = mock_logger
|
||||
with patch('logging.getLogger') as mock_get_logger:
|
||||
mock_logger = MagicMock()
|
||||
mock_get_logger.return_value = mock_logger
|
||||
|
||||
with suppress_litellm_output():
|
||||
pass
|
||||
|
||||
with suppress_litellm_output():
|
||||
pass
|
||||
|
||||
with suppress_litellm_output():
|
||||
pass
|
||||
|
||||
with suppress_litellm_output():
|
||||
pass
|
||||
|
||||
mock_get_logger.assert_called_once_with("litellm")
|
||||
finally:
|
||||
crewai.llm._litellm_logger = original_logger
|
||||
assert mock_get_logger.call_count == 2
|
||||
mock_get_logger.assert_called_with("litellm")
|
||||
|
||||
|
||||
def test_suppression_error_handling():
|
||||
|
||||
Reference in New Issue
Block a user