diff --git a/gpt_engineer/steps.py b/gpt_engineer/steps.py index a084056..ec3e5c3 100644 --- a/gpt_engineer/steps.py +++ b/gpt_engineer/steps.py @@ -6,43 +6,43 @@ from gpt_engineer.db import DBs def setup_sys_prompt(dbs): - return dbs.identity['setup'] + '\nUseful to know:\n' + dbs.identity['philosophy'] + return dbs.identity["setup"] + "\nUseful to know:\n" + dbs.identity["philosophy"] def run(ai: AI, dbs: DBs): - '''Run the AI on the main prompt and save the results''' + """Run the AI on the main prompt and save the results""" messages = ai.start( setup_sys_prompt(dbs), - dbs.input['main_prompt'], + dbs.input["main_prompt"], ) - to_files(messages[-1]['content'], dbs.workspace) + to_files(messages[-1]["content"], dbs.workspace) return messages 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'])] - user = dbs.input['main_prompt'] + """ + messages = [ai.fsystem(dbs.identity["qa"])] + user = dbs.input["main_prompt"] while True: messages = ai.next(messages, user) - if messages[-1]['content'].strip().lower() == 'no': + if messages[-1]["content"].strip().lower() == "no": break print() user = input('(answer in text, or "q" to move on)\n') print() - if not user or user == 'q': + if not user or user == "q": break user += ( - '\n\n' - 'Is anything else unclear? If yes, only answer in the form:\n' - '{remaining unclear areas} remaining questions.\n' - '{Next question}\n' + "\n\n" + "Is anything else unclear? If yes, only answer in the form:\n" + "{remaining unclear areas} remaining questions.\n" + "{Next question}\n" 'If everything is sufficiently clear, only answer "no".' ) @@ -87,14 +87,39 @@ def run_clarified(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']) - to_files(messages[-1]['content'], dbs.workspace) + messages = ai.next(messages, dbs.identity["use_qa"]) + to_files(messages[-1]["content"], dbs.workspace) + return messages + + +def execute_workspace(ai: AI, dbs: DBs): + messages = ai.start( + system=( + f"You will get infomation about a codebase that is currently on disk in the folder {dbs.workspace.path}.\n" + "From this you will answer with one code block that includes all the necessary macos terminal commands to " + "a) install dependencies " + "b) run the necessary parts of the codebase to try it." + ), + user="Information about the codebase:\n\n" + dbs.workspace["all_output.txt"], + ) + command = messages[-1]['content'].strip('```') + print('Do you want to execute this code?') + print(command) + print() + print('If yes, press enter. If no, type "no"') + print() + if input() == 'no': + print('Ok, not executing the code.') + return messages + print('Executing the code...') + print() + subprocess.run(command, shell=True) return messages # Different configs of what steps to run STEPS = { - 'default': [run], + "default": [run, execute_workspace], 'unit_tests': [gen_spec, pre_unit_tests, run_clarified], 'clarify': [clarify, run_clarified], }