diff --git a/gpt_engineer/db.py b/gpt_engineer/db.py index 13eef83c45..6bfee18cba 100644 --- a/gpt_engineer/db.py +++ b/gpt_engineer/db.py @@ -11,6 +11,9 @@ def __init__(self, path): self.path.mkdir(parents=True, exist_ok=True) + def __contains__(self, key): + return (self.path / key).is_file() + def __getitem__(self, key): full_path = self.path / key @@ -35,6 +38,6 @@ def __setitem__(self, key, val): class DBs: memory: DB logs: DB - identity: DB + preprompts: DB input: DB workspace: DB diff --git a/gpt_engineer/main.py b/gpt_engineer/main.py index cface530fc..1faa2291a0 100644 --- a/gpt_engineer/main.py +++ b/gpt_engineer/main.py @@ -1,6 +1,5 @@ import json import logging -import os import shutil from pathlib import Path @@ -54,7 +53,7 @@ def main( logs=DB(memory_path / "logs"), input=DB(input_path), workspace=DB(workspace_path), - identity=DB(Path(os.path.curdir) / "identity"), + preprompts=DB(Path(__file__).parent / "preprompts"), ) for step in STEPS[steps_config]: diff --git a/identity/fix_code b/gpt_engineer/preprompts/fix_code similarity index 100% rename from identity/fix_code rename to gpt_engineer/preprompts/fix_code diff --git a/identity/generate b/gpt_engineer/preprompts/generate similarity index 100% rename from identity/generate rename to gpt_engineer/preprompts/generate diff --git a/identity/philosophy b/gpt_engineer/preprompts/philosophy similarity index 100% rename from identity/philosophy rename to gpt_engineer/preprompts/philosophy diff --git a/identity/qa b/gpt_engineer/preprompts/qa similarity index 100% rename from identity/qa rename to gpt_engineer/preprompts/qa diff --git a/identity/respec b/gpt_engineer/preprompts/respec similarity index 100% rename from identity/respec rename to gpt_engineer/preprompts/respec diff --git a/identity/spec b/gpt_engineer/preprompts/spec similarity index 100% rename from identity/spec rename to gpt_engineer/preprompts/spec diff --git a/identity/unit_tests b/gpt_engineer/preprompts/unit_tests similarity index 100% rename from identity/unit_tests rename to gpt_engineer/preprompts/unit_tests diff --git a/identity/use_feedback b/gpt_engineer/preprompts/use_feedback similarity index 100% rename from identity/use_feedback rename to gpt_engineer/preprompts/use_feedback diff --git a/identity/use_qa b/gpt_engineer/preprompts/use_qa similarity index 100% rename from identity/use_qa rename to gpt_engineer/preprompts/use_qa diff --git a/gpt_engineer/steps.py b/gpt_engineer/steps.py index 97b890e919..b8611e6985 100644 --- a/gpt_engineer/steps.py +++ b/gpt_engineer/steps.py @@ -3,6 +3,7 @@ import subprocess from enum import Enum +from typing import Callable, TypeVar from gpt_engineer.ai import AI from gpt_engineer.chat_to_files import to_files @@ -10,7 +11,12 @@ def setup_sys_prompt(dbs): - return dbs.identity["generate"] + "\nUseful to know:\n" + dbs.identity["philosophy"] + return ( + dbs.preprompts["generate"] + "\nUseful to know:\n" + dbs.preprompts["philosophy"] + ) + + +Step = TypeVar("Step", bound=Callable[[AI, DBs], list[dict]]) def simple_gen(ai: AI, dbs: DBs): @@ -27,7 +33,7 @@ def clarify(ai: AI, dbs: DBs): """ Ask the user if they want to clarify anything and save the results to the workspace """ - messages = [ai.fsystem(dbs.identity["qa"])] + messages = [ai.fsystem(dbs.preprompts["qa"])] user = dbs.input["main_prompt"] while True: messages = ai.next(messages, user) @@ -64,7 +70,7 @@ def gen_spec(ai: AI, dbs: DBs): ai.fsystem(f"Instructions: {dbs.input['main_prompt']}"), ] - messages = ai.next(messages, dbs.identity["spec"]) + messages = ai.next(messages, dbs.preprompts["spec"]) dbs.memory["specification"] = messages[-1]["content"] @@ -73,7 +79,7 @@ def gen_spec(ai: AI, dbs: DBs): def respec(ai: AI, dbs: DBs): messages = json.loads(dbs.logs[gen_spec.__name__]) - messages += [ai.fsystem(dbs.identity["respec"])] + messages += [ai.fsystem(dbs.preprompts["respec"])] messages = ai.next(messages) messages = ai.next( @@ -102,7 +108,7 @@ def gen_unit_tests(ai: AI, dbs: DBs): ai.fuser(f"Specification:\n\n{dbs.memory['specification']}"), ] - messages = ai.next(messages, dbs.identity["unit_tests"]) + messages = ai.next(messages, dbs.preprompts["unit_tests"]) dbs.memory["unit_tests"] = messages[-1]["content"] to_files(dbs.memory["unit_tests"], dbs.workspace) @@ -118,7 +124,7 @@ def gen_clarified_code(ai: AI, dbs: DBs): messages = [ ai.fsystem(setup_sys_prompt(dbs)), ] + messages[1:] - messages = ai.next(messages, dbs.identity["use_qa"]) + messages = ai.next(messages, dbs.preprompts["use_qa"]) to_files(messages[-1]["content"], dbs.workspace) return messages @@ -133,7 +139,7 @@ def gen_code(ai: AI, dbs: DBs): ai.fuser(f"Specification:\n\n{dbs.memory['specification']}"), ai.fuser(f"Unit tests:\n\n{dbs.memory['unit_tests']}"), ] - messages = ai.next(messages, dbs.identity["use_qa"]) + messages = ai.next(messages, dbs.preprompts["use_qa"]) to_files(messages[-1]["content"], dbs.workspace) return messages @@ -170,7 +176,7 @@ def gen_entrypoint(ai, dbs): "From this you will answer with code blocks that includes all the necessary " "unix terminal commands to " "a) install dependencies " - "b) run all necessary parts of the codebase (in parallel if necessary).\n" + "b) run all necessary parts of the codebase (in parallell if necessary).\n" "Do not install globally. Do not use sudo.\n" "Do not explain the code, just give the commands.\n" "Do not use placeholders, use example values (like . for a folder argument) " @@ -191,7 +197,7 @@ def use_feedback(ai: AI, dbs: DBs): ai.fsystem(setup_sys_prompt(dbs)), ai.fuser(f"Instructions: {dbs.input['main_prompt']}"), ai.fassistant(dbs.workspace["all_output.txt"]), - ai.fsystem(dbs.identity["use_feedback"]), + ai.fsystem(dbs.preprompts["use_feedback"]), ] messages = ai.next(messages, dbs.input["feedback"]) to_files(messages[-1]["content"], dbs.workspace) @@ -204,7 +210,7 @@ def fix_code(ai: AI, dbs: DBs): ai.fsystem(setup_sys_prompt(dbs)), ai.fuser(f"Instructions: {dbs.input['main_prompt']}"), ai.fuser(code_output), - ai.fsystem(dbs.identity["fix_code"]), + ai.fsystem(dbs.preprompts["fix_code"]), ] messages = ai.next(messages, "Please fix any errors in the code above.") to_files(messages[-1]["content"], dbs.workspace) diff --git a/pyproject.toml b/pyproject.toml index c1ca348b10..241ea09586 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools", "wheel"] [project] name = "gpt-engineer" -version = "0.0.4" +version = "0.0.5" description = "Specify what you want it to build, the AI asks for clarification, and then builds it." readme = "README.md" requires-python = ">=3"