Skip to content

Commit a93a90d

Browse files
committed
Execute scripts externally by default
1 parent be76cbe commit a93a90d

File tree

2 files changed

+47
-18
lines changed

2 files changed

+47
-18
lines changed

src/pytgpt/console.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ def __init__(
332332
chat_completion=False,
333333
ignore_working=False,
334334
rawdog=False,
335-
external_exec=False,
335+
internal_exec=False,
336336
confirm_script=False,
337337
interpreter="python",
338338
*args,
@@ -352,7 +352,7 @@ def __init__(
352352

353353
self.RawDog = RawDog(
354354
quiet=quiet,
355-
external_exec=external_exec,
355+
internal_exec=internal_exec,
356356
confirm_script=confirm_script,
357357
interpreter=interpreter,
358358
prettify=True,
@@ -535,6 +535,9 @@ def __init__(
535535
self.disable_stream = False
536536
self.provider = provider
537537
self.disable_coloring = False
538+
self.internal_exec = internal_exec
539+
self.confirm_script = confirm_script
540+
self.interpreter = interpreter
538541
self.rawdog = rawdog
539542
self.__init_time = time.time()
540543
self.__start_time = time.time()
@@ -842,6 +845,30 @@ def do_last_response(self, line):
842845
is_json=True,
843846
)
844847

848+
@busy_bar.run()
849+
def do_exec(self, line):
850+
"""Exec python code in last response with RawDog"""
851+
last_response = self.bot.get_message(self.bot.last_response)
852+
assert last_response, "Last response is null"
853+
assert "```python" in last_response, "Last response has no python code"
854+
if self.rawdog:
855+
self.RawDog.main(last_response)
856+
else:
857+
rawdog = RawDog(
858+
quiet=self.quiet,
859+
internal_exec=self.internal_exec,
860+
confirm_script=self.confirm_script,
861+
interpreter=self.interpreter,
862+
prettify=self.prettify,
863+
)
864+
rawdog.main(last_response)
865+
866+
@busy_bar.run()
867+
def do_rawdog(self, line):
868+
"""Repeat executing last rawdog's python code"""
869+
assert self.rawdog, "Session not in rawdog mode. Restart with --rawdog"
870+
self.default(self.bot.get_message(self.bot.last_response))
871+
845872
@busy_bar.run()
846873
def default(self, line, exit_on_error: bool = False):
847874
"""Chat with LLM"""
@@ -854,10 +881,11 @@ def default(self, line, exit_on_error: bool = False):
854881
self.__start_time = time.time()
855882
busy_bar.start_spinning()
856883
ai_response = self.bot.chat(line, stream=False)
884+
busy_bar.stop_spinning()
857885
is_feedback = self.RawDog.main(ai_response)
858886
if is_feedback:
859887
return self.default(self.bot.chat(is_feedback))
860-
busy_bar.stop_spinning()
888+
self.__end_time = time.time()
861889

862890
else:
863891
self.__start_time = time.time()
@@ -1151,10 +1179,10 @@ class ChatInteractive:
11511179
help="Generate and auto-execute Python scripts - (experimental)",
11521180
)
11531181
@click.option(
1154-
"-ex",
1155-
"--external-exec",
1182+
"-ix",
1183+
"--internal-exec",
11561184
is_flag=True,
1157-
help="RawDog : Execute scripts with system's python interpreter",
1185+
help="RawDog : Execute scripts with exec function instead of out-of-script interpreter",
11581186
)
11591187
@click.option(
11601188
"-cs",
@@ -1200,7 +1228,7 @@ def interactive(
12001228
chat_completion,
12011229
ignore_working,
12021230
rawdog,
1203-
external_exec,
1231+
internal_exec,
12041232
confirm_script,
12051233
interpreter,
12061234
):
@@ -1226,7 +1254,7 @@ def interactive(
12261254
chat_completion,
12271255
ignore_working,
12281256
rawdog=rawdog,
1229-
external_exec=external_exec,
1257+
internal_exec=internal_exec,
12301258
confirm_script=confirm_script,
12311259
interpreter=interpreter,
12321260
)
@@ -1437,10 +1465,10 @@ class ChatGenerate:
14371465
help="Generate and auto-execute Python scripts - (experimental)",
14381466
)
14391467
@click.option(
1440-
"-ex",
1441-
"--external-exec",
1468+
"-ix",
1469+
"--internal-exec",
14421470
is_flag=True,
1443-
help="RawDog : Execute scripts with system's python interpreter",
1471+
help="RawDog : Execute scripts with exec function instead of out-of-script interpreter",
14441472
)
14451473
@click.option(
14461474
"-cs",
@@ -1486,7 +1514,7 @@ def generate(
14861514
with_copied,
14871515
ignore_working,
14881516
rawdog,
1489-
external_exec,
1517+
internal_exec,
14901518
confirm_script,
14911519
interpreter,
14921520
):
@@ -1511,7 +1539,7 @@ def generate(
15111539
quiet,
15121540
ignore_working=ignore_working,
15131541
rawdog=rawdog,
1514-
external_exec=external_exec,
1542+
internal_exec=internal_exec,
15151543
confirm_script=confirm_script,
15161544
interpreter=interpreter,
15171545
)

src/pytgpt/utils.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ class RawDog:
430430
def __init__(
431431
self,
432432
quiet: bool = False,
433-
external_exec: bool = False,
433+
internal_exec: bool = False,
434434
confirm_script: bool = False,
435435
interpreter: str = "python",
436436
prettify: bool = True,
@@ -439,7 +439,7 @@ def __init__(
439439
440440
Args:
441441
quiet (bool, optional): Flag for control logging. Defaults to False.
442-
external_exec (bool, optional): Execute scripts with system's python executable. Defaults to False.
442+
internal_exec (bool, optional): Execute scripts with exec function. Defaults to False.
443443
confirm_script (bool, optional): Give consent to scripts prior to execution. Defaults to False.
444444
interpreter (str, optional): Python's interpreter name. Defaults to Python.
445445
prettify (bool, optional): Prettify the code on stdout. Defaults to True.
@@ -453,7 +453,7 @@ def __init__(
453453
"Be alerted on the risk posed! (Experimental)\n"
454454
"Use '--quiet' to suppress this message and code/logs stdout.\n"
455455
)
456-
self.external_exec = external_exec
456+
self.internal_exec = internal_exec
457457
self.confirm_script = confirm_script
458458
self.quiet = quiet
459459
self.interpreter = interpreter
@@ -565,7 +565,7 @@ def main(self, response: str) -> None:
565565

566566
raw_code_plus = re.sub(r"(```)(python)?", "", raw_code)
567567

568-
if "CONTINUE" in response or self.external_exec:
568+
if "CONTINUE" in response or not self.internal_exec:
569569
self.log("Executing script externally")
570570
path_to_script = os.path.join(default_path, "execute_this.py")
571571
with open(path_to_script, "w") as fh:
@@ -593,7 +593,8 @@ def main(self, response: str) -> None:
593593
exec(raw_code_plus)
594594
except Exception as e:
595595
self.log(
596-
"Exception occurred while executing script. Responding with error.",
596+
"Exception occurred while executing script. Responding with error: "
597+
f"{e.args[1] if len(e.args)>1 else str(e)}",
597598
"error",
598599
)
599600
return f"PREVIOUS SCRIPT EXCEPTION:\n{str(e)}"

0 commit comments

Comments
 (0)