fix breakage when cloning agent/crew using knowledge_sources

This commit is contained in:
Lorenze Jay
2025-01-19 15:58:01 -08:00
parent 3e4f112f39
commit f3004ffb2b
2 changed files with 23 additions and 2 deletions

View File

@@ -18,6 +18,7 @@ from pydantic_core import PydanticCustomError
from crewai.agents.agent_builder.utilities.base_token_process import TokenProcess
from crewai.agents.cache.cache_handler import CacheHandler
from crewai.agents.tools_handler import ToolsHandler
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
from crewai.tools import BaseTool
from crewai.tools.base_tool import Tool
from crewai.utilities import I18N, Logger, RPMController
@@ -130,6 +131,10 @@ class BaseAgent(ABC, BaseModel):
max_tokens: Optional[int] = Field(
default=None, description="Maximum number of tokens for the agent's execution."
)
knowledge_sources: Optional[List[BaseKnowledgeSource]] = Field(
default=None,
description="Knowledge sources for the agent.",
)
@model_validator(mode="before")
@classmethod
@@ -256,13 +261,21 @@ class BaseAgent(ABC, BaseModel):
"tools_handler",
"cache_handler",
"llm",
"knowledge_sources",
}
# Copy llm and clear callbacks
existing_llm = shallow_copy(self.llm)
copied_data = self.model_dump(exclude=exclude)
copied_data = {k: v for k, v in copied_data.items() if v is not None}
copied_agent = type(self)(**copied_data, llm=existing_llm, tools=self.tools)
copied_agent = type(self)(
**copied_data,
llm=existing_llm,
tools=self.tools,
knowledge_sources=self.knowledge_sources
if hasattr(self, "knowledge_sources")
else None,
)
return copied_agent

View File

@@ -1036,6 +1036,7 @@ class Crew(BaseModel):
"_telemetry",
"agents",
"tasks",
"knowledge_source",
}
cloned_agents = [agent.copy() for agent in self.agents]
@@ -1062,7 +1063,14 @@ class Crew(BaseModel):
copied_data.pop("agents", None)
copied_data.pop("tasks", None)
copied_crew = Crew(**copied_data, agents=cloned_agents, tasks=cloned_tasks)
copied_crew = Crew(
**copied_data,
agents=cloned_agents,
tasks=cloned_tasks,
knowledge_sources=self.knowledge_sources
if hasattr(self, "knowledge_sources")
else None,
)
return copied_crew