mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 00:28:31 +00:00
fix: resolve type-checker and test isolation issues
- Remove hasattr/getattr calls that caused mypy type-checker errors - Fix test mocking to use 'crewai.agent.Knowledge' for proper isolation - Prevent network calls in tests by mocking Knowledge class constructor - All knowledge-related tests now pass locally without API dependencies Co-Authored-By: João <joao@crewai.com>
This commit is contained in:
@@ -198,11 +198,10 @@ class Agent(BaseAgent):
|
|||||||
def set_knowledge(self, crew_embedder: Optional[Dict[str, Any]] = None):
|
def set_knowledge(self, crew_embedder: Optional[Dict[str, Any]] = None):
|
||||||
try:
|
try:
|
||||||
current_embedder = crew_embedder or self.embedder
|
current_embedder = crew_embedder or self.embedder
|
||||||
if (hasattr(self, '_knowledge_loaded') and
|
if (self._knowledge_loaded and
|
||||||
self._knowledge_loaded and
|
|
||||||
self.knowledge is not None and
|
self.knowledge is not None and
|
||||||
getattr(self, '_last_embedder', None) == current_embedder and
|
self._last_embedder == current_embedder and
|
||||||
getattr(self, '_last_knowledge_sources', None) == self.knowledge_sources):
|
self._last_knowledge_sources == self.knowledge_sources):
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.embedder is None and crew_embedder:
|
if self.embedder is None and crew_embedder:
|
||||||
|
|||||||
@@ -2291,15 +2291,21 @@ def test_agent_knowledge_caching_on_multiple_set_knowledge_calls():
|
|||||||
llm="gpt-4o-mini"
|
llm="gpt-4o-mini"
|
||||||
)
|
)
|
||||||
|
|
||||||
with patch.object(Knowledge, 'add_sources') as mock_add_sources:
|
with patch('crewai.agent.Knowledge') as mock_knowledge_class:
|
||||||
agent.set_knowledge()
|
mock_knowledge_instance = MagicMock()
|
||||||
assert mock_add_sources.call_count == 1, "Knowledge sources should be loaded once on first call"
|
mock_knowledge_class.return_value = mock_knowledge_instance
|
||||||
|
|
||||||
agent.set_knowledge()
|
agent.set_knowledge()
|
||||||
assert mock_add_sources.call_count == 1, "Knowledge sources should not be reloaded on second call"
|
assert mock_knowledge_class.call_count == 1, "Knowledge should be created once on first call"
|
||||||
|
assert mock_knowledge_instance.add_sources.call_count == 1, "add_sources should be called once"
|
||||||
|
|
||||||
agent.set_knowledge()
|
agent.set_knowledge()
|
||||||
assert mock_add_sources.call_count == 1, "Knowledge sources should not be reloaded on third call"
|
assert mock_knowledge_class.call_count == 1, "Knowledge should not be recreated on second call"
|
||||||
|
assert mock_knowledge_instance.add_sources.call_count == 1, "add_sources should not be called again"
|
||||||
|
|
||||||
|
agent.set_knowledge()
|
||||||
|
assert mock_knowledge_class.call_count == 1, "Knowledge should not be recreated on third call"
|
||||||
|
assert mock_knowledge_instance.add_sources.call_count == 1, "add_sources should not be called again"
|
||||||
|
|
||||||
|
|
||||||
def test_agent_knowledge_reloads_when_sources_change():
|
def test_agent_knowledge_reloads_when_sources_change():
|
||||||
@@ -2317,14 +2323,17 @@ def test_agent_knowledge_reloads_when_sources_change():
|
|||||||
llm="gpt-4o-mini"
|
llm="gpt-4o-mini"
|
||||||
)
|
)
|
||||||
|
|
||||||
with patch.object(Knowledge, 'add_sources') as mock_add_sources:
|
with patch('crewai.agent.Knowledge') as mock_knowledge_class:
|
||||||
|
mock_knowledge_instance = MagicMock()
|
||||||
|
mock_knowledge_class.return_value = mock_knowledge_instance
|
||||||
|
|
||||||
agent.set_knowledge()
|
agent.set_knowledge()
|
||||||
assert mock_add_sources.call_count == 1, "Knowledge sources should be loaded once on first call"
|
assert mock_knowledge_class.call_count == 1, "Knowledge should be created once on first call"
|
||||||
|
|
||||||
agent.knowledge_sources = [string_source2]
|
agent.knowledge_sources = [string_source2]
|
||||||
|
|
||||||
agent.set_knowledge()
|
agent.set_knowledge()
|
||||||
assert mock_add_sources.call_count == 2, "Knowledge sources should be reloaded when sources change"
|
assert mock_knowledge_class.call_count == 2, "Knowledge should be recreated when sources change"
|
||||||
|
|
||||||
|
|
||||||
def test_agent_knowledge_reloads_when_embedder_changes():
|
def test_agent_knowledge_reloads_when_embedder_changes():
|
||||||
@@ -2343,12 +2352,15 @@ def test_agent_knowledge_reloads_when_embedder_changes():
|
|||||||
embedder1 = {"provider": "openai", "model": "text-embedding-ada-002"}
|
embedder1 = {"provider": "openai", "model": "text-embedding-ada-002"}
|
||||||
embedder2 = {"provider": "openai", "model": "text-embedding-3-small"}
|
embedder2 = {"provider": "openai", "model": "text-embedding-3-small"}
|
||||||
|
|
||||||
with patch.object(Knowledge, 'add_sources') as mock_add_sources:
|
with patch('crewai.agent.Knowledge') as mock_knowledge_class:
|
||||||
|
mock_knowledge_instance = MagicMock()
|
||||||
|
mock_knowledge_class.return_value = mock_knowledge_instance
|
||||||
|
|
||||||
agent.set_knowledge(crew_embedder=embedder1)
|
agent.set_knowledge(crew_embedder=embedder1)
|
||||||
assert mock_add_sources.call_count == 1, "Knowledge sources should be loaded once on first call"
|
assert mock_knowledge_class.call_count == 1, "Knowledge should be created once on first call"
|
||||||
|
|
||||||
agent.set_knowledge(crew_embedder=embedder2)
|
agent.set_knowledge(crew_embedder=embedder2)
|
||||||
assert mock_add_sources.call_count == 2, "Knowledge sources should be reloaded when embedder changes"
|
assert mock_knowledge_class.call_count == 2, "Knowledge should be recreated when embedder changes"
|
||||||
|
|
||||||
|
|
||||||
def test_agent_reset_knowledge_cache():
|
def test_agent_reset_knowledge_cache():
|
||||||
|
|||||||
Reference in New Issue
Block a user