From 6e442d2381cb7b4bdbebc8922de0244cfed5aec6 Mon Sep 17 00:00:00 2001 From: Mic Neale Date: Wed, 18 Sep 2024 11:56:18 +1000 Subject: [PATCH 1/4] add global optional user goosehints file --- src/goose/toolkit/developer.py | 10 +++++-- tests/toolkit/test_developer.py | 48 ++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/goose/toolkit/developer.py b/src/goose/toolkit/developer.py index 450ce24444..ec06134e78 100644 --- a/src/goose/toolkit/developer.py +++ b/src/goose/toolkit/developer.py @@ -39,9 +39,15 @@ def system(self) -> str: """Retrieve system configuration details for developer""" hints_path = Path(".goosehints") system_prompt = Message.load("prompts/developer.jinja").text + home_hints_path = Path.home() / '.goosehints' + hints = [] if hints_path.is_file(): - goosehints = render_template(hints_path) - system_prompt = f"{system_prompt}\n\nHints:\n{goosehints}" + hints.append(render_template(hints_path)) + if home_hints_path.is_file(): + hints.append(render_template(home_hints_path)) + if hints: + hints_text = '\n'.join(hints) + system_prompt = f"{system_prompt}\n\nHints:\n{hints_text}" return system_prompt @tool diff --git a/tests/toolkit/test_developer.py b/tests/toolkit/test_developer.py index e36c498c0b..b80b06e8d7 100644 --- a/tests/toolkit/test_developer.py +++ b/tests/toolkit/test_developer.py @@ -55,7 +55,53 @@ def test_system_prompt_with_goosehints(temp_dir, developer_toolkit): assert system_prompt.endswith(expected_end) -def test_update_plan(developer_toolkit): +def test_system_prompt_with_goosehints_only_from_home_dir(temp_dir, developer_toolkit): + readme_file_home = Path.home() / "README.md" + readme_file_home.write_text("This is from the README.md file in home.") + + home_hints_file = Path.home() / ".goosehints" + home_jinja_template_content = "Hints from home:\n\n{% include 'README.md' %}\nEnd." + home_hints_file.write_text(home_jinja_template_content) + + try: + with change_dir(temp_dir): + system_prompt = developer_toolkit.system() + expected_content_home = "Hints from home:\n\nThis is from the README.md file in home.\nEnd." + expected_end = f"Hints:\n{expected_content_home}" + assert system_prompt.endswith(expected_end) + finally: + home_hints_file.unlink() + readme_file_home.unlink() + + + + readme_file = temp_dir / "README.md" + readme_file.write_text("This is from the README.md file.") + + hints_file = temp_dir / ".goosehints" + jinja_template_content = "Hints from local:\n\n{% include 'README.md' %}\nEnd." + hints_file.write_text(jinja_template_content) + + home_hints_file = Path.home() / ".goosehints" + home_jinja_template_content = "Hints from home:\n\n{% include 'README.md' %}\nEnd." + home_hints_file.write_text(home_jinja_template_content) + + home_readme_file = Path.home() / "README.md" + home_readme_file.write_text("This is from the README.md file in home.") + + try: + with change_dir(temp_dir): + system_prompt = developer_toolkit.system() + expected_content_local = "Hints from local:\n\nThis is from the README.md file.\nEnd." + expected_content_home = "Hints from home:\n\nThis is from the README.md file in home.\nEnd." + expected_end = f"Hints:\n{expected_content_local}\n{expected_content_home}" + assert system_prompt.endswith(expected_end) + finally: + home_hints_file.unlink() + home_readme_file.unlink() + + + tasks = [ {"description": "Task 1", "status": "planned"}, {"description": "Task 2", "status": "complete"}, From 69aa47d3a60791927ba1e59d28a9ed51a196e674 Mon Sep 17 00:00:00 2001 From: Mic Neale Date: Wed, 18 Sep 2024 12:13:33 +1000 Subject: [PATCH 2/4] formatting --- src/goose/toolkit/developer.py | 4 ++-- tests/toolkit/test_developer.py | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/goose/toolkit/developer.py b/src/goose/toolkit/developer.py index ec06134e78..a86e981f2a 100644 --- a/src/goose/toolkit/developer.py +++ b/src/goose/toolkit/developer.py @@ -39,14 +39,14 @@ def system(self) -> str: """Retrieve system configuration details for developer""" hints_path = Path(".goosehints") system_prompt = Message.load("prompts/developer.jinja").text - home_hints_path = Path.home() / '.goosehints' + home_hints_path = Path.home() / ".goosehints" hints = [] if hints_path.is_file(): hints.append(render_template(hints_path)) if home_hints_path.is_file(): hints.append(render_template(home_hints_path)) if hints: - hints_text = '\n'.join(hints) + hints_text = "\n".join(hints) system_prompt = f"{system_prompt}\n\nHints:\n{hints_text}" return system_prompt diff --git a/tests/toolkit/test_developer.py b/tests/toolkit/test_developer.py index b80b06e8d7..00575d6195 100644 --- a/tests/toolkit/test_developer.py +++ b/tests/toolkit/test_developer.py @@ -73,8 +73,6 @@ def test_system_prompt_with_goosehints_only_from_home_dir(temp_dir, developer_to home_hints_file.unlink() readme_file_home.unlink() - - readme_file = temp_dir / "README.md" readme_file.write_text("This is from the README.md file.") @@ -100,8 +98,6 @@ def test_system_prompt_with_goosehints_only_from_home_dir(temp_dir, developer_to home_hints_file.unlink() home_readme_file.unlink() - - tasks = [ {"description": "Task 1", "status": "planned"}, {"description": "Task 2", "status": "complete"}, From df79e52006393081958fe0ae7352f3999862bc4e Mon Sep 17 00:00:00 2001 From: Mic Neale Date: Fri, 20 Sep 2024 11:40:48 +1000 Subject: [PATCH 3/4] move hints to config dir --- README.md | 1 + src/goose/toolkit/developer.py | 2 +- tests/toolkit/test_developer.py | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3757234242..e295b7d8f4 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,7 @@ The following justfile shows our common commands: ```just {% include 'justfile' %} ``` +You can also place `.goosehints` in `~/.config/goose/.goosehints` if you like for always loaded hints personal to you. ### Examples #### provider as `anthropic` diff --git a/src/goose/toolkit/developer.py b/src/goose/toolkit/developer.py index a86e981f2a..e18017cdf4 100644 --- a/src/goose/toolkit/developer.py +++ b/src/goose/toolkit/developer.py @@ -39,7 +39,7 @@ def system(self) -> str: """Retrieve system configuration details for developer""" hints_path = Path(".goosehints") system_prompt = Message.load("prompts/developer.jinja").text - home_hints_path = Path.home() / ".goosehints" + home_hints_path = Path.home() / ".config/goose/.goosehints" hints = [] if hints_path.is_file(): hints.append(render_template(hints_path)) diff --git a/tests/toolkit/test_developer.py b/tests/toolkit/test_developer.py index 00575d6195..4116981bf9 100644 --- a/tests/toolkit/test_developer.py +++ b/tests/toolkit/test_developer.py @@ -56,10 +56,10 @@ def test_system_prompt_with_goosehints(temp_dir, developer_toolkit): def test_system_prompt_with_goosehints_only_from_home_dir(temp_dir, developer_toolkit): - readme_file_home = Path.home() / "README.md" + readme_file_home = Path.home() / ".config/goose/README.md" readme_file_home.write_text("This is from the README.md file in home.") - home_hints_file = Path.home() / ".goosehints" + home_hints_file = Path.home() / ".config/goose/.goosehints" home_jinja_template_content = "Hints from home:\n\n{% include 'README.md' %}\nEnd." home_hints_file.write_text(home_jinja_template_content) @@ -80,11 +80,11 @@ def test_system_prompt_with_goosehints_only_from_home_dir(temp_dir, developer_to jinja_template_content = "Hints from local:\n\n{% include 'README.md' %}\nEnd." hints_file.write_text(jinja_template_content) - home_hints_file = Path.home() / ".goosehints" + home_hints_file = Path.home() / ".config/goose/.goosehints" home_jinja_template_content = "Hints from home:\n\n{% include 'README.md' %}\nEnd." home_hints_file.write_text(home_jinja_template_content) - home_readme_file = Path.home() / "README.md" + home_readme_file = Path.home() / ".config/goose/README.md" home_readme_file.write_text("This is from the README.md file in home.") try: From 4be85ba5e100578714d6c5f78a481e1d61fe76c8 Mon Sep 17 00:00:00 2001 From: Mic Neale Date: Fri, 20 Sep 2024 11:48:28 +1000 Subject: [PATCH 4/4] testing goosehints --- tests/toolkit/test_developer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/toolkit/test_developer.py b/tests/toolkit/test_developer.py index 4116981bf9..ff67b8fb7a 100644 --- a/tests/toolkit/test_developer.py +++ b/tests/toolkit/test_developer.py @@ -57,6 +57,7 @@ def test_system_prompt_with_goosehints(temp_dir, developer_toolkit): def test_system_prompt_with_goosehints_only_from_home_dir(temp_dir, developer_toolkit): readme_file_home = Path.home() / ".config/goose/README.md" + readme_file_home.parent.mkdir(parents=True, exist_ok=True) readme_file_home.write_text("This is from the README.md file in home.") home_hints_file = Path.home() / ".config/goose/.goosehints"