Spaces:
Runtime error
Runtime error
from swarmai.agents.AgentBase import AgentBase | |
from swarmai.utils.ai_engines.GPTConversEngine import GPTConversEngine | |
from swarmai.utils.task_queue.Task import Task | |
from swarmai.utils.PromptFactory import PromptFactory | |
class GeneralPurposeAgent(AgentBase): | |
"""Manager agent class that is responsible for breaking down the tasks into subtasks and assigning them into the task queue. | |
""" | |
def __init__(self, agent_id, agent_type, swarm, logger): | |
super().__init__(agent_id, agent_type, swarm, logger) | |
self.engine = GPTConversEngine("gpt-3.5-turbo", 0.5, 1000) | |
self.TASK_METHODS = {} | |
for method in self.swarm.TASK_TYPES: | |
if method != "breakdown_to_subtasks": | |
self.TASK_METHODS[method] = self._think | |
def perform_task(self): | |
self.step = "perform_task" | |
try: | |
# self.task is already taken in the beginning of the cycle in AgentBase | |
if not isinstance(self.task, Task): | |
raise Exception(f"Task is not of type Task, but {type(self.task)}") | |
task_type = self.task.task_type | |
if task_type not in self.TASK_METHODS: | |
raise Exception(f"Task type {task_type} is not supported by the agent {self.agent_id} of type {self.agent_type}") | |
self.result = self.TASK_METHODS[task_type](self.task.task_description) | |
return True | |
except Exception as e: | |
self.log(f"Agent {self.agent_id} of type {self.agent_type} failed to perform the task {self.task.task_description} with error {e}", level = "error") | |
return False | |
def share(self): | |
pass | |
def _think(self, task_description): | |
self.step = "think" | |
prompt = ( | |
"Act as an analyst and worker." | |
f"You need to perform a task: {task_description}. The type of the task is {self.task.task_type}." | |
"If you don't have capabilities to perform the task (for example no google access), return empty string (or just a space)" | |
"Make sure to actually solve the task and provide a valid solution; avoid describing how you would do it." | |
) | |
# generate a conversation | |
conversation = [ | |
{"role": "user", "content": prompt} | |
] | |
result = self.engine.call_model(conversation) | |
# add to shared memory | |
self._send_data_to_swarm(result) | |
self.log(f"Agent {self.agent_id} of type {self.agent_type} thought about the task:\n{task_description}\n\nand shared the following result:\n{result}", level = "info") | |
return result | |