diff options
Diffstat (limited to 'autogpts/autogpt/autogpt/config/ai_directives.py')
-rw-r--r-- | autogpts/autogpt/autogpt/config/ai_directives.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/autogpts/autogpt/autogpt/config/ai_directives.py b/autogpts/autogpt/autogpt/config/ai_directives.py new file mode 100644 index 000000000..6b5aa4375 --- /dev/null +++ b/autogpts/autogpt/autogpt/config/ai_directives.py @@ -0,0 +1,48 @@ +import logging +from pathlib import Path + +import yaml +from pydantic import BaseModel, Field + +from autogpt.logs.helpers import request_user_double_check +from autogpt.utils import validate_yaml_file + +logger = logging.getLogger(__name__) + + +class AIDirectives(BaseModel): + """An object that contains the basic directives for the AI prompt. + + Attributes: + constraints (list): A list of constraints that the AI should adhere to. + resources (list): A list of resources that the AI can utilize. + best_practices (list): A list of best practices that the AI should follow. + """ + + resources: list[str] = Field(default_factory=list) + constraints: list[str] = Field(default_factory=list) + best_practices: list[str] = Field(default_factory=list) + + @staticmethod + def from_file(prompt_settings_file: Path) -> "AIDirectives": + (validated, message) = validate_yaml_file(prompt_settings_file) + if not validated: + logger.error(message, extra={"title": "FAILED FILE VALIDATION"}) + request_user_double_check() + raise RuntimeError(f"File validation failed: {message}") + + with open(prompt_settings_file, encoding="utf-8") as file: + config_params = yaml.load(file, Loader=yaml.FullLoader) + + return AIDirectives( + constraints=config_params.get("constraints", []), + resources=config_params.get("resources", []), + best_practices=config_params.get("best_practices", []), + ) + + def __add__(self, other: "AIDirectives") -> "AIDirectives": + return AIDirectives( + resources=self.resources + other.resources, + constraints=self.constraints + other.constraints, + best_practices=self.best_practices + other.best_practices, + ).copy(deep=True) |