mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-26 16:48:13 +00:00
Fix type-checker errors in set_knowledge implementation
Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
@@ -134,23 +134,50 @@ class Agent(BaseAgent):
|
|||||||
self.cache_handler = CacheHandler()
|
self.cache_handler = CacheHandler()
|
||||||
self.set_cache_handler(self.cache_handler)
|
self.set_cache_handler(self.cache_handler)
|
||||||
|
|
||||||
def set_knowledge(self, crew_embedder: Optional[Dict[str, Any]] = None):
|
def set_knowledge(
|
||||||
|
self,
|
||||||
|
knowledge_sources: Optional[List[BaseKnowledgeSource]] = None,
|
||||||
|
embedder_config: Optional[Dict[str, Any]] = None
|
||||||
|
) -> None:
|
||||||
|
"""Set knowledge sources for the agent with optional embedder configuration.
|
||||||
|
|
||||||
|
This method allows agents to integrate external knowledge sources for enhanced
|
||||||
|
contextual understanding and information retrieval during task execution.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
knowledge_sources: List of knowledge sources to integrate. These can include
|
||||||
|
various data types such as text files, PDFs, CSV files, JSON files,
|
||||||
|
web pages, YouTube videos, and documentation websites.
|
||||||
|
embedder_config: Configuration for embedding generation. If not provided,
|
||||||
|
a default configuration will be used.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
ValueError: If the provided knowledge sources are invalid.
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
if self.embedder is None and crew_embedder:
|
# Handle backward compatibility with crew_embedder
|
||||||
self.embedder = crew_embedder
|
if embedder_config and self.embedder is None:
|
||||||
|
self.embedder = embedder_config
|
||||||
|
|
||||||
|
# Set knowledge sources if provided
|
||||||
|
if knowledge_sources:
|
||||||
|
if not isinstance(knowledge_sources, list):
|
||||||
|
raise ValueError("Knowledge sources must be a list")
|
||||||
|
|
||||||
|
if not all(isinstance(k, BaseKnowledgeSource) for k in knowledge_sources):
|
||||||
|
raise ValueError("All knowledge sources must be instances of BaseKnowledgeSource")
|
||||||
|
|
||||||
|
self.knowledge_sources = knowledge_sources
|
||||||
|
|
||||||
if self.knowledge_sources:
|
if self.knowledge_sources:
|
||||||
full_pattern = re.compile(r"[^a-zA-Z0-9\-_\r\n]|(\.\.)")
|
full_pattern = re.compile(r"[^a-zA-Z0-9\-_\r\n]|(\.\.)")
|
||||||
knowledge_agent_name = f"{re.sub(full_pattern, '_', self.role)}"
|
knowledge_agent_name = f"{re.sub(full_pattern, '_', self.role)}"
|
||||||
if isinstance(self.knowledge_sources, list) and all(
|
self.knowledge = Knowledge(
|
||||||
isinstance(k, BaseKnowledgeSource) for k in self.knowledge_sources
|
sources=self.knowledge_sources,
|
||||||
):
|
embedder=self.embedder,
|
||||||
self.knowledge = Knowledge(
|
collection_name=knowledge_agent_name,
|
||||||
sources=self.knowledge_sources,
|
storage=self.knowledge_storage or None,
|
||||||
embedder=self.embedder,
|
)
|
||||||
collection_name=knowledge_agent_name,
|
|
||||||
storage=self.knowledge_storage or None,
|
|
||||||
)
|
|
||||||
except (TypeError, ValueError) as e:
|
except (TypeError, ValueError) as e:
|
||||||
raise ValueError(f"Invalid Knowledge Configuration: {str(e)}")
|
raise ValueError(f"Invalid Knowledge Configuration: {str(e)}")
|
||||||
|
|
||||||
|
|||||||
@@ -621,7 +621,7 @@ class Crew(BaseModel):
|
|||||||
agent.i18n = i18n
|
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]"
|
# 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.crew = self # type: ignore[attr-defined]
|
||||||
agent.set_knowledge(crew_embedder=self.embedder)
|
agent.set_knowledge(embedder_config=self.embedder)
|
||||||
# TODO: Create an AgentFunctionCalling protocol for future refactoring
|
# TODO: Create an AgentFunctionCalling protocol for future refactoring
|
||||||
if not agent.function_calling_llm: # type: ignore # "BaseAgent" has no attribute "function_calling_llm"
|
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"
|
agent.function_calling_llm = self.function_calling_llm # type: ignore # "BaseAgent" has no attribute "function_calling_llm"
|
||||||
|
|||||||
Reference in New Issue
Block a user