[docs]classPromptGenerator:"""Generator of custom prompt strings. Does this based on constraints, commands, resources, and performance evaluations. """
[docs]def__init__(self)->None:"""Initialize the PromptGenerator object. Starts with empty lists of constraints, commands, resources, and performance evaluations. """self.constraints:List[str]=[]self.commands:List[BaseTool]=[]self.resources:List[str]=[]self.performance_evaluation:List[str]=[]self.response_format={"thoughts":{"text":"thought","reasoning":"reasoning","plan":"- short bulleted\n- list that conveys\n- long-term plan","criticism":"constructive self-criticism","speak":"thoughts summary to say to user",},"command":{"name":"command name","args":{"arg name":"value"}},}
[docs]defadd_constraint(self,constraint:str)->None:""" Add a constraint to the constraints list. Args: constraint (str): The constraint to be added. """self.constraints.append(constraint)
[docs]defadd_resource(self,resource:str)->None:""" Add a resource to the resources list. Args: resource (str): The resource to be added. """self.resources.append(resource)
[docs]defadd_performance_evaluation(self,evaluation:str)->None:""" Add a performance evaluation item to the performance_evaluation list. Args: evaluation (str): The evaluation item to be added. """self.performance_evaluation.append(evaluation)
def_generate_numbered_list(self,items:list,item_type:str="list")->str:""" Generate a numbered list from given items based on the item_type. Args: items (list): A list of items to be numbered. item_type (str, optional): The type of items in the list. Defaults to 'list'. Returns: str: The formatted numbered list. """ifitem_type=="command":command_strings=[f"{i+1}. {self._generate_command_string(item)}"fori,iteminenumerate(items)]finish_description=("use this to signal that you have finished all your objectives")finish_args=('"response": "final response to let ''people know you have finished your objectives"')finish_string=(f"{len(items)+1}. {FINISH_NAME}: "f"{finish_description}, args: {finish_args}")return"\n".join(command_strings+[finish_string])else:return"\n".join(f"{i+1}. {item}"fori,iteminenumerate(items))
[docs]defgenerate_prompt_string(self)->str:"""Generate a prompt string. Returns: str: The generated prompt string. """formatted_response_format=json.dumps(self.response_format,indent=4)prompt_string=(f"Constraints:\n{self._generate_numbered_list(self.constraints)}\n\n"f"Commands:\n"f"{self._generate_numbered_list(self.commands,item_type='command')}\n\n"f"Resources:\n{self._generate_numbered_list(self.resources)}\n\n"f"Performance Evaluation:\n"f"{self._generate_numbered_list(self.performance_evaluation)}\n\n"f"You should only respond in JSON format as described below "f"\nResponse Format: \n{formatted_response_format} "f"\nEnsure the response can be parsed by Python json.loads")returnprompt_string
[docs]defget_prompt(tools:List[BaseTool])->str:"""Generates a prompt string. It includes various constraints, commands, resources, and performance evaluations. Returns: str: The generated prompt string. """# Initialize the PromptGenerator objectprompt_generator=PromptGenerator()# Add constraints to the PromptGenerator objectprompt_generator.add_constraint("~4000 word limit for short term memory. ""Your short term memory is short, ""so immediately save important information to files.")prompt_generator.add_constraint("If you are unsure how you previously did something ""or want to recall past events, ""thinking about similar events will help you remember.")prompt_generator.add_constraint("No user assistance")prompt_generator.add_constraint('Exclusively use the commands listed in double quotes e.g. "command name"')# Add commands to the PromptGenerator objectfortoolintools:prompt_generator.add_tool(tool)# Add resources to the PromptGenerator objectprompt_generator.add_resource("Internet access for searches and information gathering.")prompt_generator.add_resource("Long Term memory management.")prompt_generator.add_resource("GPT-3.5 powered Agents for delegation of simple tasks.")prompt_generator.add_resource("File output.")# Add performance evaluations to the PromptGenerator objectprompt_generator.add_performance_evaluation("Continuously review and analyze your actions ""to ensure you are performing to the best of your abilities.")prompt_generator.add_performance_evaluation("Constructively self-criticize your big-picture behavior constantly.")prompt_generator.add_performance_evaluation("Reflect on past decisions and strategies to refine your approach.")prompt_generator.add_performance_evaluation("Every command has a cost, so be smart and efficient. ""Aim to complete tasks in the least number of steps.")# Generate the prompt stringprompt_string=prompt_generator.generate_prompt_string()returnprompt_string