mirror of
https://github.com/aljazceru/gpt-engineer.git
synced 2025-12-17 12:45:26 +01:00
Dont require to be in the same folder as the repo to run, v0.0.5
This commit is contained in:
@@ -11,6 +11,9 @@ class DB:
|
|||||||
|
|
||||||
self.path.mkdir(parents=True, exist_ok=True)
|
self.path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
return (self.path / key).is_file()
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
full_path = self.path / key
|
full_path = self.path / key
|
||||||
|
|
||||||
@@ -35,6 +38,6 @@ class DB:
|
|||||||
class DBs:
|
class DBs:
|
||||||
memory: DB
|
memory: DB
|
||||||
logs: DB
|
logs: DB
|
||||||
identity: DB
|
preprompts: DB
|
||||||
input: DB
|
input: DB
|
||||||
workspace: DB
|
workspace: DB
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -54,7 +53,7 @@ def main(
|
|||||||
logs=DB(memory_path / "logs"),
|
logs=DB(memory_path / "logs"),
|
||||||
input=DB(input_path),
|
input=DB(input_path),
|
||||||
workspace=DB(workspace_path),
|
workspace=DB(workspace_path),
|
||||||
identity=DB(Path(os.path.curdir) / "identity"),
|
preprompts=DB(Path(__file__).parent / "preprompts"),
|
||||||
)
|
)
|
||||||
|
|
||||||
for step in STEPS[steps_config]:
|
for step in STEPS[steps_config]:
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import re
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from typing import Callable, TypeVar
|
||||||
|
|
||||||
from gpt_engineer.ai import AI
|
from gpt_engineer.ai import AI
|
||||||
from gpt_engineer.chat_to_files import to_files
|
from gpt_engineer.chat_to_files import to_files
|
||||||
@@ -10,7 +11,12 @@ from gpt_engineer.db import DBs
|
|||||||
|
|
||||||
|
|
||||||
def setup_sys_prompt(dbs):
|
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):
|
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
|
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"]
|
user = dbs.input["main_prompt"]
|
||||||
while True:
|
while True:
|
||||||
messages = ai.next(messages, user)
|
messages = ai.next(messages, user)
|
||||||
@@ -64,7 +70,7 @@ def gen_spec(ai: AI, dbs: DBs):
|
|||||||
ai.fsystem(f"Instructions: {dbs.input['main_prompt']}"),
|
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"]
|
dbs.memory["specification"] = messages[-1]["content"]
|
||||||
|
|
||||||
@@ -73,7 +79,7 @@ def gen_spec(ai: AI, dbs: DBs):
|
|||||||
|
|
||||||
def respec(ai: AI, dbs: DBs):
|
def respec(ai: AI, dbs: DBs):
|
||||||
messages = json.loads(dbs.logs[gen_spec.__name__])
|
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(messages)
|
||||||
messages = ai.next(
|
messages = ai.next(
|
||||||
@@ -102,7 +108,7 @@ def gen_unit_tests(ai: AI, dbs: DBs):
|
|||||||
ai.fuser(f"Specification:\n\n{dbs.memory['specification']}"),
|
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"]
|
dbs.memory["unit_tests"] = messages[-1]["content"]
|
||||||
to_files(dbs.memory["unit_tests"], dbs.workspace)
|
to_files(dbs.memory["unit_tests"], dbs.workspace)
|
||||||
@@ -118,7 +124,7 @@ def gen_clarified_code(ai: AI, dbs: DBs):
|
|||||||
messages = [
|
messages = [
|
||||||
ai.fsystem(setup_sys_prompt(dbs)),
|
ai.fsystem(setup_sys_prompt(dbs)),
|
||||||
] + messages[1:]
|
] + 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)
|
to_files(messages[-1]["content"], dbs.workspace)
|
||||||
return messages
|
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"Specification:\n\n{dbs.memory['specification']}"),
|
||||||
ai.fuser(f"Unit tests:\n\n{dbs.memory['unit_tests']}"),
|
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)
|
to_files(messages[-1]["content"], dbs.workspace)
|
||||||
return messages
|
return messages
|
||||||
|
|
||||||
@@ -170,7 +176,7 @@ def gen_entrypoint(ai, dbs):
|
|||||||
"From this you will answer with code blocks that includes all the necessary "
|
"From this you will answer with code blocks that includes all the necessary "
|
||||||
"unix terminal commands to "
|
"unix terminal commands to "
|
||||||
"a) install dependencies "
|
"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 install globally. Do not use sudo.\n"
|
||||||
"Do not explain the code, just give the commands.\n"
|
"Do not explain the code, just give the commands.\n"
|
||||||
"Do not use placeholders, use example values (like . for a folder argument) "
|
"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.fsystem(setup_sys_prompt(dbs)),
|
||||||
ai.fuser(f"Instructions: {dbs.input['main_prompt']}"),
|
ai.fuser(f"Instructions: {dbs.input['main_prompt']}"),
|
||||||
ai.fassistant(dbs.workspace["all_output.txt"]),
|
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"])
|
messages = ai.next(messages, dbs.input["feedback"])
|
||||||
to_files(messages[-1]["content"], dbs.workspace)
|
to_files(messages[-1]["content"], dbs.workspace)
|
||||||
@@ -199,12 +205,12 @@ def use_feedback(ai: AI, dbs: DBs):
|
|||||||
|
|
||||||
|
|
||||||
def fix_code(ai: AI, dbs: DBs):
|
def fix_code(ai: AI, dbs: DBs):
|
||||||
code_output = json.loads(dbs.logs[gen_code.__name__])[-1]["content"]
|
code_ouput = json.loads(dbs.logs[gen_code.__name__])[-1]["content"]
|
||||||
messages = [
|
messages = [
|
||||||
ai.fsystem(setup_sys_prompt(dbs)),
|
ai.fsystem(setup_sys_prompt(dbs)),
|
||||||
ai.fuser(f"Instructions: {dbs.input['main_prompt']}"),
|
ai.fuser(f"Instructions: {dbs.input['main_prompt']}"),
|
||||||
ai.fuser(code_output),
|
ai.fuser(code_ouput),
|
||||||
ai.fsystem(dbs.identity["fix_code"]),
|
ai.fsystem(dbs.preprompts["fix_code"]),
|
||||||
]
|
]
|
||||||
messages = ai.next(messages, "Please fix any errors in the code above.")
|
messages = ai.next(messages, "Please fix any errors in the code above.")
|
||||||
to_files(messages[-1]["content"], dbs.workspace)
|
to_files(messages[-1]["content"], dbs.workspace)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ requires = ["setuptools", "wheel"]
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "gpt-engineer"
|
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."
|
description = "Specify what you want it to build, the AI asks for clarification, and then builds it."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3"
|
requires-python = ">=3"
|
||||||
|
|||||||
Reference in New Issue
Block a user