From 271faa917b7f72c06dafc48e7daa5a14f862d3a1 Mon Sep 17 00:00:00 2001 From: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com> Date: Wed, 26 Feb 2025 09:10:43 -0800 Subject: [PATCH] feat: Enhance agent knowledge setup with optional crew embedder (#2232) - Modify `Agent` class to add `set_knowledge` method - Allow setting embedder from crew-level configuration - Remove `_set_knowledge` method from initialization - Update `Crew` class to set agent knowledge during agent setup - Add default implementation in `BaseAgent` for compatibility --- src/crewai/agent.py | 6 ++++-- src/crewai/agents/agent_builder/base_agent.py | 3 +++ src/crewai/crew.py | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/crewai/agent.py b/src/crewai/agent.py index e47dab364..048790782 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -114,7 +114,6 @@ class Agent(BaseAgent): @model_validator(mode="after") def post_init_setup(self): - self._set_knowledge() self.agent_ops_agent_name = self.role self.llm = create_llm(self.llm) @@ -134,8 +133,11 @@ class Agent(BaseAgent): self.cache_handler = CacheHandler() self.set_cache_handler(self.cache_handler) - def _set_knowledge(self): + def set_knowledge(self, crew_embedder: Optional[Dict[str, Any]] = None): try: + if self.embedder is None and crew_embedder: + self.embedder = crew_embedder + if self.knowledge_sources: full_pattern = re.compile(r"[^a-zA-Z0-9\-_\r\n]|(\.\.)") knowledge_agent_name = f"{re.sub(full_pattern, '_', self.role)}" diff --git a/src/crewai/agents/agent_builder/base_agent.py b/src/crewai/agents/agent_builder/base_agent.py index b1976c269..215c66a66 100644 --- a/src/crewai/agents/agent_builder/base_agent.py +++ b/src/crewai/agents/agent_builder/base_agent.py @@ -382,3 +382,6 @@ class BaseAgent(ABC, BaseModel): # Use the injected RPM controller rather than auto-creating one if rpm_controller: self.set_rpm_controller(rpm_controller) + + def set_knowledge(self, crew_embedder: Optional[Dict[str, Any]] = None): + pass diff --git a/src/crewai/crew.py b/src/crewai/crew.py index d607b76a0..5f265eaf9 100644 --- a/src/crewai/crew.py +++ b/src/crewai/crew.py @@ -623,6 +623,7 @@ class Crew(BaseModel): agent.i18n = i18n # type: ignore[attr-defined] # Argument 1 to "_interpolate_inputs" of "Crew" has incompatible type "dict[str, Any] | None"; expected "dict[str, Any]" agent.crew = self # type: ignore[attr-defined] + agent.set_knowledge(crew_embedder=self.embedder) # TODO: Create an AgentFunctionCalling protocol for future refactoring if not agent.function_calling_llm: # type: ignore # "BaseAgent" has no attribute "function_calling_llm" agent.function_calling_llm = self.function_calling_llm # type: ignore # "BaseAgent" has no attribute "function_calling_llm"