From 55ed9b366f85aa245c23d2465fa8b69d55c6d677 Mon Sep 17 00:00:00 2001 From: lorenzejay Date: Tue, 6 May 2025 20:42:23 -0700 Subject: [PATCH] refactor: improve error handling in knowledge query processing This commit refactors the knowledge query handling in the Agent class by changing the order of checks for LLM compatibility. It now logs a warning and emits a failure event if the LLM is not an instance of BaseLLM before attempting to call the LLM. Additionally, the task_prompt attribute has been removed from the KnowledgeQueryFailedEvent, simplifying the event structure. --- src/crewai/agent.py | 70 +++++++++++-------- .../utilities/events/knowledge_events.py | 1 - 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/crewai/agent.py b/src/crewai/agent.py index 0fb3994f3..dc637967f 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -622,36 +622,46 @@ class Agent(BaseAgent): task_prompt=task_prompt ) rewriter_prompt = self.i18n.slice("knowledge_search_query_system_prompt") - if isinstance(self.llm, BaseLLM): - try: - rewritten_query = self.llm.call( - [ - { - "role": "system", - "content": rewriter_prompt, - }, - {"role": "user", "content": query}, - ] - ) - crewai_event_bus.emit( - self, - event=KnowledgeQueryCompletedEvent( - query=query, - agent=self, - ), - ) - return rewritten_query - except Exception as e: - crewai_event_bus.emit( - self, - event=KnowledgeQueryFailedEvent( - task_prompt=task_prompt, - agent=self, - error=str(e), - ), - ) - return None - else: + if not isinstance(self.llm, BaseLLM): + self._logger.log( + "warning", + f"Knowledge search query failed: LLM for agent '{self.role}' is not an instance of BaseLLM", + ) + crewai_event_bus.emit( + self, + event=KnowledgeQueryFailedEvent( + agent=self, + error="LLM is not compatible with knowledge search queries", + ), + ) + return None + + try: + rewritten_query = self.llm.call( + [ + { + "role": "system", + "content": rewriter_prompt, + }, + {"role": "user", "content": query}, + ] + ) + crewai_event_bus.emit( + self, + event=KnowledgeQueryCompletedEvent( + query=query, + agent=self, + ), + ) + return rewritten_query + except Exception as e: + crewai_event_bus.emit( + self, + event=KnowledgeQueryFailedEvent( + agent=self, + error=str(e), + ), + ) return None def kickoff( diff --git a/src/crewai/utilities/events/knowledge_events.py b/src/crewai/utilities/events/knowledge_events.py index 3913e9e64..e512ca575 100644 --- a/src/crewai/utilities/events/knowledge_events.py +++ b/src/crewai/utilities/events/knowledge_events.py @@ -34,7 +34,6 @@ class KnowledgeQueryStartedEvent(BaseEvent): class KnowledgeQueryFailedEvent(BaseEvent): """Event emitted when a knowledge query fails.""" - task_prompt: str type: str = "knowledge_query_failed" agent: BaseAgent error: str