mirror of
https://github.com/aljazceru/gpt-engineer.git
synced 2025-12-18 13:15:00 +01:00
32
.gitignore
vendored
32
.gitignore
vendored
@@ -1 +1,33 @@
|
||||
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Distribution / packaging
|
||||
dist/
|
||||
build/
|
||||
*.egg-info/
|
||||
*.egg
|
||||
|
||||
# Virtual environments
|
||||
venv/
|
||||
ENV/
|
||||
|
||||
# IDE-specific files
|
||||
.vscode/
|
||||
|
||||
# Compiled Python modules
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
|
||||
# macOS specific files
|
||||
.DS_Store
|
||||
|
||||
# Windows specific files
|
||||
Thumbs.db
|
||||
|
||||
# this application's specific files
|
||||
archive
|
||||
|
||||
5
ai.py
5
ai.py
@@ -1,4 +1,3 @@
|
||||
|
||||
import openai
|
||||
|
||||
|
||||
@@ -25,9 +24,7 @@ class AI:
|
||||
messages = messages + [{"role": "user", "content": prompt}]
|
||||
|
||||
response = openai.ChatCompletion.create(
|
||||
messages=messages,
|
||||
stream=True,
|
||||
**self.kwargs
|
||||
messages=messages, stream=True, **self.kwargs
|
||||
)
|
||||
|
||||
chat = []
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import re
|
||||
|
||||
|
||||
def parse_chat(chat):# -> List[Tuple[str, str]]:
|
||||
def parse_chat(chat): # -> List[Tuple[str, str]]:
|
||||
# Get all ``` blocks
|
||||
regex = r"```(.*?)```"
|
||||
|
||||
|
||||
2
db.py
2
db.py
@@ -1,6 +1,6 @@
|
||||
import os
|
||||
|
||||
from dataclasses import dataclass
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
|
||||
18
main.py
18
main.py
@@ -1,14 +1,11 @@
|
||||
import json
|
||||
import os
|
||||
import pathlib
|
||||
from typing import Optional
|
||||
import openai
|
||||
from chat_to_files import to_files
|
||||
from ai import AI
|
||||
from steps import STEPS
|
||||
from db import DB, DBs
|
||||
|
||||
import typer
|
||||
|
||||
from ai import AI
|
||||
from db import DB, DBs
|
||||
from steps import STEPS
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
@@ -16,11 +13,13 @@ app = typer.Typer()
|
||||
@app.command()
|
||||
def chat(
|
||||
project_path: str = typer.Argument(None, help="path"),
|
||||
run_prefix: str = typer.Option("", help="run prefix, if you want to run multiple variants of the same project and later compare them"),
|
||||
run_prefix: str = typer.Option(
|
||||
"",
|
||||
help="run prefix, if you want to run multiple variants of the same project and later compare them",
|
||||
),
|
||||
model: str = "gpt-4",
|
||||
temperature: float = 0.1,
|
||||
):
|
||||
|
||||
if project_path is None:
|
||||
project_path = str(pathlib.Path(__file__).parent / "example")
|
||||
|
||||
@@ -41,7 +40,6 @@ def chat(
|
||||
identity=DB(pathlib.Path(__file__).parent / "identity"),
|
||||
)
|
||||
|
||||
|
||||
for step in STEPS:
|
||||
messages = step(ai, dbs)
|
||||
dbs.logs[step.__name__] = json.dumps(messages)
|
||||
|
||||
59
pyproject.toml
Normal file
59
pyproject.toml
Normal file
@@ -0,0 +1,59 @@
|
||||
# https://beta.ruff.rs/docs/configuration/#using-rufftoml
|
||||
[tool.ruff]
|
||||
select = ["F", "E", "W", "I001"]
|
||||
line-length = 90
|
||||
show-fixes = false
|
||||
target-version = "py311"
|
||||
task-tags = ["TODO", "FIXME"]
|
||||
exclude = [
|
||||
".bzr",
|
||||
".direnv",
|
||||
".eggs",
|
||||
".git",
|
||||
".ruff_cache",
|
||||
".svn",
|
||||
".tox",
|
||||
".venv",
|
||||
"__pypackages__",
|
||||
"_build",
|
||||
"buck-out",
|
||||
"build",
|
||||
"dist",
|
||||
"node_modules",
|
||||
"venv",
|
||||
]
|
||||
|
||||
[tool.ruff.isort]
|
||||
known-first-party = []
|
||||
known-third-party = []
|
||||
section-order = [
|
||||
"future",
|
||||
"standard-library",
|
||||
"third-party",
|
||||
"first-party",
|
||||
"local-folder",
|
||||
]
|
||||
combine-as-imports = true
|
||||
split-on-trailing-comma = false
|
||||
lines-between-types = 1
|
||||
|
||||
# https://black.readthedocs.io/en/stable/usage_and_configuration/the_basics.html
|
||||
[tool.black]
|
||||
line-length = 90
|
||||
target-version = ["py311"]
|
||||
include = '\.pyi?$'
|
||||
exclude = '''
|
||||
(
|
||||
/(
|
||||
\.direnv
|
||||
| \.eggs
|
||||
| \.git
|
||||
| \.tox
|
||||
| \.venv
|
||||
| _build
|
||||
| build
|
||||
| dist
|
||||
| venv
|
||||
)/
|
||||
)
|
||||
'''
|
||||
@@ -1,2 +1,4 @@
|
||||
openai
|
||||
typer
|
||||
black==23.3.0
|
||||
openai==0.27.8
|
||||
ruff==0.0.272
|
||||
typer==0.9.0
|
||||
|
||||
@@ -17,7 +17,6 @@ def chat(
|
||||
temperature: float = 0.1,
|
||||
max_tokens: int = 4096,
|
||||
):
|
||||
|
||||
ai = AI(
|
||||
model=model,
|
||||
temperature=temperature,
|
||||
|
||||
27
steps.py
27
steps.py
@@ -1,20 +1,28 @@
|
||||
import json
|
||||
|
||||
from ai import AI
|
||||
from chat_to_files import to_files
|
||||
from db import DBs
|
||||
import json
|
||||
|
||||
|
||||
def setup_sys_prompt(dbs):
|
||||
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'''
|
||||
messages = ai.start(setup_sys_prompt(dbs), dbs.input['main_prompt'])
|
||||
messages = ai.start(
|
||||
setup_sys_prompt(dbs),
|
||||
dbs.input['main_prompt'],
|
||||
)
|
||||
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'''
|
||||
'''
|
||||
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']
|
||||
while True:
|
||||
@@ -41,25 +49,20 @@ def clarify(ai: AI, dbs: DBs):
|
||||
print()
|
||||
return messages
|
||||
|
||||
|
||||
def run_clarified(ai: AI, dbs: DBs):
|
||||
# get the messages from previous step
|
||||
messages = json.loads(dbs.logs[clarify.__name__])
|
||||
|
||||
messages = (
|
||||
[
|
||||
messages = [
|
||||
ai.fsystem(setup_sys_prompt(dbs)),
|
||||
] +
|
||||
messages[1:]
|
||||
)
|
||||
] + messages[1:]
|
||||
messages = ai.next(messages, dbs.identity['use_qa'])
|
||||
to_files(messages[-1]['content'], dbs.workspace)
|
||||
return messages
|
||||
|
||||
|
||||
STEPS=[
|
||||
clarify,
|
||||
run_clarified
|
||||
]
|
||||
STEPS = [clarify, run_clarified]
|
||||
|
||||
# Future steps that can be added:
|
||||
# improve_files,
|
||||
|
||||
Reference in New Issue
Block a user