import json from typing import List class PromptGenerator: """A class for generating custom prompt strings.""" def __init__(self) -> None: """Initialize the PromptGenerator object.""" self.constraints: List[str] = [] self.commands: List[str] = [] 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"}}, } def add_constraint(self, constraint: str) -> None: """ Add a constraint to the constraints list. Args: constraint (str): The constraint to be added. """ self.constraints.append(constraint) def add_command(self, command: str) -> None: """ Add a command to the commands list. Args: command (str): The command to be added. """ self.commands.append(command) def add_resource(self, resource: str) -> None: """ Add a resource to the resources list. Args: resource (str): The resource to be added. """ self.resources.append(resource) def add_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_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{''.join(self.constraints)}\n\n" f"Commands:\n{''.join(self.commands)}\n\n" f"Resources:\n{''.join(self.resources)}\n\n" f"Performance Evaluation:\n{''.join(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" ) return prompt_string