Compare commits

...

1 Commits

Author SHA1 Message Date
Brandon Hancock
ef3c89ccf3 fix task cloning error 2024-10-09 13:48:45 -04:00
2 changed files with 23 additions and 6 deletions

View File

@@ -900,7 +900,22 @@ class Crew(BaseModel):
}
cloned_agents = [agent.copy() for agent in self.agents]
cloned_tasks = [task.copy(cloned_agents) for task in self.tasks]
task_mapping = {}
cloned_tasks = []
for task in self.tasks:
cloned_task = task.copy(cloned_agents, task_mapping)
cloned_tasks.append(cloned_task)
task_mapping[task.key] = cloned_task
for cloned_task, original_task in zip(cloned_tasks, self.tasks):
if original_task.context:
cloned_context = [
task_mapping[context_task.key]
for context_task in original_task.context
]
cloned_task.context = cloned_context
copied_data = self.model_dump(exclude=exclude)
copied_data = {k: v for k, v in copied_data.items() if v is not None}

View File

@@ -276,9 +276,7 @@ class Task(BaseModel):
content = (
json_output
if json_output
else pydantic_output.model_dump_json()
if pydantic_output
else result
else pydantic_output.model_dump_json() if pydantic_output else result
)
self._save_file(content)
@@ -319,7 +317,9 @@ class Task(BaseModel):
self.processed_by_agents.add(agent_name)
self.delegations += 1
def copy(self, agents: List["BaseAgent"]) -> "Task":
def copy(
self, agents: List["BaseAgent"], task_mapping: Dict[str, "Task"]
) -> "Task":
"""Create a deep copy of the Task."""
exclude = {
"id",
@@ -332,7 +332,9 @@ class Task(BaseModel):
copied_data = {k: v for k, v in copied_data.items() if v is not None}
cloned_context = (
[task.copy(agents) for task in self.context] if self.context else None
[task_mapping[context_task.key] for context_task in self.context]
if self.context
else None
)
def get_agent_by_role(role: str) -> Union["BaseAgent", None]: