From 7f4a7d7ccdbe2033a8c90cd72f416dec10724a58 Mon Sep 17 00:00:00 2001 From: Coley Date: Fri, 7 Apr 2023 16:47:09 -0400 Subject: [PATCH 1/3] Added class, method and function doc strings --- scripts/ai_config.py | 60 +++++++++++++++++++++++++++++++++++++---- scripts/ai_functions.py | 32 +++++++++++++++++----- 2 files changed, 81 insertions(+), 11 deletions(-) diff --git a/scripts/ai_config.py b/scripts/ai_config.py index 2f43274863..6ac243c295 100644 --- a/scripts/ai_config.py +++ b/scripts/ai_config.py @@ -3,7 +3,25 @@ import data class AIConfig: - def __init__(self, ai_name="", ai_role="", ai_goals=[]): + """ + A class object that contains the configuration information for the AI + + Attributes: + ai_name (str): The name of the AI. + ai_role (str): The description of the AI's role. + ai_goals (list): The list of objectives the AI is supposed to complete. + """ + def __init__(self, ai_name:str="", ai_role:str="", ai_goals:list=[]) -> None: + """ + Initialize a class instance + + Parameters: + ai_name (str): The name of the AI. + ai_role (str): The description of the AI's role. + ai_goals (list): The list of objectives the AI is supposed to complete. + Returns: + None + """ self.ai_name = ai_name self.ai_role = ai_role self.ai_goals = ai_goals @@ -12,8 +30,18 @@ class AIConfig: SAVE_FILE = "../ai_settings.yaml" @classmethod - def load(cls, config_file=SAVE_FILE): - # Load variables from yaml file if it exists + def load(cls:object, config_file:str=SAVE_FILE) -> object: + """ + Returns class object with parameters (ai_name, ai_role, ai_goals) loaded from yaml file if yaml file exists, + else returns class with no parameters. + + Parameters: + cls (class object): An AIConfig Class object. + config_file (int): The path to the config yaml file. DEFAULT: "../ai_settings.yaml" + + Returns: + cls (object): A instance of given cls object + """ try: with open(config_file) as file: config_params = yaml.load(file, Loader=yaml.FullLoader) @@ -26,12 +54,30 @@ class AIConfig: return cls(ai_name, ai_role, ai_goals) - def save(self, config_file=SAVE_FILE): + def save(self, config_file:str=SAVE_FILE) -> None: + """ + Saves the class parameters to the specified file yaml file path as a yaml file. + + Parameters: + config_file(str): The path to the config yaml file. DEFAULT: "../ai_settings.yaml" + + Returns: + None + """ config = {"ai_name": self.ai_name, "ai_role": self.ai_role, "ai_goals": self.ai_goals} with open(config_file, "w") as file: yaml.dump(config, file) - def construct_full_prompt(self): + def construct_full_prompt(self) -> str: + """ + Returns a prompt to the user with the class information in an organized fashion. + + Parameters: + None + + Returns: + full_prompt (str): A string containing the intitial prompt for the user including the ai_name, ai_role and ai_goals. + """ prompt_start = """Your decisions must always be made independently without seeking user assistance. Play to your strengths as an LLM and pursue simple strategies with no legal complications.""" # Construct full prompt @@ -41,3 +87,7 @@ class AIConfig: full_prompt += f"\n\n{data.load_prompt()}" return full_prompt + +if __name__ == "__main__": + import doctest + doctest.testmod() \ No newline at end of file diff --git a/scripts/ai_functions.py b/scripts/ai_functions.py index 05aa93a2da..e54f096698 100644 --- a/scripts/ai_functions.py +++ b/scripts/ai_functions.py @@ -5,9 +5,16 @@ from call_ai_function import call_ai_function from json_parser import fix_and_parse_json cfg = Config() -# Evaluating code def evaluate_code(code: str) -> List[str]: + """ + A function that takes in a string and returns a response from create chat completion api call. + + Parameters: + code (str): Code to be evaluated. + Returns: + A result string from create chat completion. A list of suggestions to improve the code. + """ function_string = "def analyze_code(code: str) -> List[str]:" args = [code] description_string = """Analyzes the given code and returns a list of suggestions for improvements.""" @@ -17,9 +24,16 @@ def evaluate_code(code: str) -> List[str]: return result_string -# Improving code - def improve_code(suggestions: List[str], code: str) -> str: + """ + A function that takes in code and suggestions and returns a response from create chat completion api call. + + Parameters: + suggestions (List): A list of suggestions around what needs to be improved. + code (str): Code to be improved. + Returns: + A result string from create chat completion. Improved code in response. + """ function_string = ( "def generate_improved_code(suggestions: List[str], code: str) -> str:" ) @@ -30,10 +44,16 @@ def improve_code(suggestions: List[str], code: str) -> str: return result_string -# Writing tests - - def write_tests(code: str, focus: List[str]) -> str: + """ + A function that takes in code and focus topics and returns a response from create chat completion api call. + + Parameters: + focus (List): A list of suggestions around what needs to be improved. + code (str): Code for test cases to be generated against. + Returns: + A result string from create chat completion. Test cases for the submitted code in response. + """ function_string = ( "def create_test_cases(code: str, focus: Optional[str] = None) -> str:" ) From 7ae5ffe389729a2f5e4c1d859e5fae1b687ba94a Mon Sep 17 00:00:00 2001 From: Coley Date: Fri, 7 Apr 2023 16:52:50 -0400 Subject: [PATCH 2/3] linted changes --- scripts/ai_config.py | 24 +++++++++++++----------- scripts/ai_functions.py | 10 ++++------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/ai_config.py b/scripts/ai_config.py index 6ac243c295..4656f23a07 100644 --- a/scripts/ai_config.py +++ b/scripts/ai_config.py @@ -5,16 +5,17 @@ import data class AIConfig: """ A class object that contains the configuration information for the AI - + Attributes: ai_name (str): The name of the AI. ai_role (str): The description of the AI's role. ai_goals (list): The list of objectives the AI is supposed to complete. """ - def __init__(self, ai_name:str="", ai_role:str="", ai_goals:list=[]) -> None: + + def __init__(self, ai_name: str="", ai_role: str="", ai_goals: list=[]) -> None: """ Initialize a class instance - + Parameters: ai_name (str): The name of the AI. ai_role (str): The description of the AI's role. @@ -30,15 +31,15 @@ class AIConfig: SAVE_FILE = "../ai_settings.yaml" @classmethod - def load(cls:object, config_file:str=SAVE_FILE) -> object: + def load(cls: object, config_file: str=SAVE_FILE) -> object: """ Returns class object with parameters (ai_name, ai_role, ai_goals) loaded from yaml file if yaml file exists, else returns class with no parameters. - + Parameters: cls (class object): An AIConfig Class object. config_file (int): The path to the config yaml file. DEFAULT: "../ai_settings.yaml" - + Returns: cls (object): A instance of given cls object """ @@ -54,13 +55,13 @@ class AIConfig: return cls(ai_name, ai_role, ai_goals) - def save(self, config_file:str=SAVE_FILE) -> None: + def save(self, config_file: str=SAVE_FILE) -> None: """ Saves the class parameters to the specified file yaml file path as a yaml file. - + Parameters: config_file(str): The path to the config yaml file. DEFAULT: "../ai_settings.yaml" - + Returns: None """ @@ -71,10 +72,10 @@ class AIConfig: def construct_full_prompt(self) -> str: """ Returns a prompt to the user with the class information in an organized fashion. - + Parameters: None - + Returns: full_prompt (str): A string containing the intitial prompt for the user including the ai_name, ai_role and ai_goals. """ @@ -88,6 +89,7 @@ class AIConfig: full_prompt += f"\n\n{data.load_prompt()}" return full_prompt + if __name__ == "__main__": import doctest doctest.testmod() \ No newline at end of file diff --git a/scripts/ai_functions.py b/scripts/ai_functions.py index e54f096698..eee26e1529 100644 --- a/scripts/ai_functions.py +++ b/scripts/ai_functions.py @@ -9,7 +9,7 @@ cfg = Config() def evaluate_code(code: str) -> List[str]: """ A function that takes in a string and returns a response from create chat completion api call. - + Parameters: code (str): Code to be evaluated. Returns: @@ -20,14 +20,14 @@ def evaluate_code(code: str) -> List[str]: description_string = """Analyzes the given code and returns a list of suggestions for improvements.""" result_string = call_ai_function(function_string, args, description_string) - + return result_string def improve_code(suggestions: List[str], code: str) -> str: """ A function that takes in code and suggestions and returns a response from create chat completion api call. - + Parameters: suggestions (List): A list of suggestions around what needs to be improved. code (str): Code to be improved. @@ -47,7 +47,7 @@ def improve_code(suggestions: List[str], code: str) -> str: def write_tests(code: str, focus: List[str]) -> str: """ A function that takes in code and focus topics and returns a response from create chat completion api call. - + Parameters: focus (List): A list of suggestions around what needs to be improved. code (str): Code for test cases to be generated against. @@ -62,5 +62,3 @@ def write_tests(code: str, focus: List[str]) -> str: result_string = call_ai_function(function_string, args, description_string) return result_string - - From 77c98a03119c1b62777bec50100012298a0967c0 Mon Sep 17 00:00:00 2001 From: Coley Date: Fri, 7 Apr 2023 16:57:39 -0400 Subject: [PATCH 3/3] Removed doctest call --- scripts/ai_config.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/ai_config.py b/scripts/ai_config.py index 4656f23a07..038d5e5dd2 100644 --- a/scripts/ai_config.py +++ b/scripts/ai_config.py @@ -89,7 +89,3 @@ class AIConfig: full_prompt += f"\n\n{data.load_prompt()}" return full_prompt - -if __name__ == "__main__": - import doctest - doctest.testmod() \ No newline at end of file