diff --git a/autogpt/config/ai_config.py b/autogpt/config/ai_config.py index d662429f2d8a..88acbfe6fb72 100644 --- a/autogpt/config/ai_config.py +++ b/autogpt/config/ai_config.py @@ -7,7 +7,7 @@ import os import platform from pathlib import Path -from typing import Optional, Type +from typing import Any, Optional, Type import distro import yaml @@ -79,7 +79,12 @@ def load(config_file: str = SAVE_FILE) -> "AIConfig": ai_name = config_params.get("ai_name", "") ai_role = config_params.get("ai_role", "") - ai_goals = config_params.get("ai_goals", []) + ai_goals = [ + str(goal).strip("{}").replace("'", "").replace('"', "") + if isinstance(goal, dict) + else str(goal) + for goal in config_params.get("ai_goals", []) + ] api_budget = config_params.get("api_budget", 0.0) # type: Type[AIConfig] return AIConfig(ai_name, ai_role, ai_goals, api_budget) diff --git a/tests/test_ai_config.py b/tests/test_ai_config.py new file mode 100644 index 000000000000..a9fcdad68e90 --- /dev/null +++ b/tests/test_ai_config.py @@ -0,0 +1,45 @@ +from autogpt.config.ai_config import AIConfig + +""" +Test cases for the AIConfig class, which handles loads the AI configuration +settings from a YAML file. +""" + + +def test_goals_are_always_lists_of_strings(tmp_path): + """Test if the goals attribute is always a list of strings.""" + + yaml_content = """ +ai_goals: +- Goal 1: Make a sandwich +- Goal 2, Eat the sandwich +- Goal 3 - Go to sleep +- "Goal 4: Wake up" +ai_name: McFamished +ai_role: A hungry AI +api_budget: 0.0 +""" + config_file = tmp_path / "ai_settings.yaml" + config_file.write_text(yaml_content) + + ai_config = AIConfig.load(config_file) + + assert len(ai_config.ai_goals) == 4 + assert ai_config.ai_goals[0] == "Goal 1: Make a sandwich" + assert ai_config.ai_goals[1] == "Goal 2, Eat the sandwich" + assert ai_config.ai_goals[2] == "Goal 3 - Go to sleep" + assert ai_config.ai_goals[3] == "Goal 4: Wake up" + + config_file.write_text("") + ai_config.save(config_file) + + yaml_content2 = """ai_goals: +- 'Goal 1: Make a sandwich' +- Goal 2, Eat the sandwich +- Goal 3 - Go to sleep +- 'Goal 4: Wake up' +ai_name: McFamished +ai_role: A hungry AI +api_budget: 0.0 +""" + assert config_file.read_text() == yaml_content2