text: if len(task_parts) == 2:            task_id = task_parts[0].strip()            task_name = task_parts[1].strip()            prioritized_task_list.append({"task_id": task_id, "task_name": task_name})    return prioritized_task_listdef _get_top_tasks(vectorstore, query: str, k: int) -> List[str]:    """Get the top k tasks based on the query."""    results = vectorstore.similarity_search_with_score(query, k=k)    if not results:        return []    sorted_results, _ = zip(*sorted(results, key=lambda x: x[1], reverse=True))    return [str(item.metadata["task"]) for item in sorted_results]def execute_task(    vectorstore, execution_chain: LLMChain, objective: str, task: str, k: int = 5) -> str:    """Execute a task."""    context = _get_top_tasks(vectorstore, query=objective, k=k)    return execution_chain.run(objective=objective, context=context, task=task)class BabyAGI(Chain, BaseModel):    """Controller model for the BabyAGI agent."""    task_list: deque = Field(default_factory=deque)    task_creation_chain: TaskCreationChain = Field(...)    task_prioritization_chain: TaskPrioritizationChain = Field(...)    execution_chain: ExecutionChain = Field(...)    task_id_counter: int = Field(1)    vectorstore: VectorStore = Field(init=False)    max_iterations: Optional[int] = None