From 52072e27da005f13d03af9d1bde0d70eb8e845a6 Mon Sep 17 00:00:00 2001 From: Artem Shcherbina Date: Sat, 28 Sep 2024 14:47:20 +0300 Subject: [PATCH 1/3] Fix blocking log --- gpt_engineer/core/default/disk_execution_env.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gpt_engineer/core/default/disk_execution_env.py b/gpt_engineer/core/default/disk_execution_env.py index 8394de10a0..8dfcbbc24b 100644 --- a/gpt_engineer/core/default/disk_execution_env.py +++ b/gpt_engineer/core/default/disk_execution_env.py @@ -32,6 +32,18 @@ from gpt_engineer.core.default.file_store import FileStore from gpt_engineer.core.files_dict import FilesDict +import fcntl +import os + +# Taken from https://gist.github.com/sebclaeys/1232088 +def non_block_read(output): + fd = output.fileno() + fl = fcntl.fcntl(fd, fcntl.F_GETFL) + fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK) + try: + return output.readline() + except: + return "" class DiskExecutionEnv(BaseExecutionEnv): """ @@ -88,8 +100,8 @@ def run(self, command: str, timeout: Optional[int] = None) -> Tuple[str, str, in while p.poll() is None: assert p.stdout is not None assert p.stderr is not None - stdout = p.stdout.readline() - stderr = p.stderr.readline() + stdout = non_block_read(p.stdout) + stderr = non_block_read(p.stderr) if stdout: print(stdout, end="") stdout_full += stdout From 643b077ece175024653c4318df921b2ecbd41b09 Mon Sep 17 00:00:00 2001 From: Artem Shcherbina Date: Sat, 28 Sep 2024 14:56:22 +0300 Subject: [PATCH 2/3] Reformatted disk_execution_env.py using black --- gpt_engineer/core/default/disk_execution_env.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gpt_engineer/core/default/disk_execution_env.py b/gpt_engineer/core/default/disk_execution_env.py index 8dfcbbc24b..42c2ca42e0 100644 --- a/gpt_engineer/core/default/disk_execution_env.py +++ b/gpt_engineer/core/default/disk_execution_env.py @@ -35,6 +35,7 @@ import fcntl import os + # Taken from https://gist.github.com/sebclaeys/1232088 def non_block_read(output): fd = output.fileno() @@ -45,6 +46,7 @@ def non_block_read(output): except: return "" + class DiskExecutionEnv(BaseExecutionEnv): """ An execution environment that runs code on the local file system and captures From eea50b1d3ecab5c7373f132ebc1159ff6fea84b1 Mon Sep 17 00:00:00 2001 From: Artem Shcherbina Date: Sat, 28 Sep 2024 14:57:48 +0300 Subject: [PATCH 3/3] one more fix --- gpt_engineer/core/default/disk_execution_env.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gpt_engineer/core/default/disk_execution_env.py b/gpt_engineer/core/default/disk_execution_env.py index 42c2ca42e0..b13396f60d 100644 --- a/gpt_engineer/core/default/disk_execution_env.py +++ b/gpt_engineer/core/default/disk_execution_env.py @@ -22,6 +22,8 @@ - FilesDict: For handling collections of files. """ +import fcntl +import os import subprocess import time @@ -32,9 +34,6 @@ from gpt_engineer.core.default.file_store import FileStore from gpt_engineer.core.files_dict import FilesDict -import fcntl -import os - # Taken from https://gist.github.com/sebclaeys/1232088 def non_block_read(output):