diff --git a/gpt_engineer/applications/cli/main.py b/gpt_engineer/applications/cli/main.py index 95158bc000..a965bdc52d 100644 --- a/gpt_engineer/applications/cli/main.py +++ b/gpt_engineer/applications/cli/main.py @@ -26,8 +26,11 @@ """ import difflib +import json import logging import os +import platform +import subprocess import sys from pathlib import Path @@ -237,6 +240,34 @@ def prompt_yesno() -> bool: print("Please respond with 'y' or 'n'") +def get_system_info(): + system_info = { + "os": platform.system(), + "os_version": platform.version(), + "architecture": platform.machine(), + "python_version": sys.version, + "packages": format_installed_packages(get_installed_packages()), + } + return system_info + + +def get_installed_packages(): + try: + result = subprocess.run( + [sys.executable, "-m", "pip", "list", "--format=json"], + capture_output=True, + text=True, + ) + packages = json.loads(result.stdout) + return {pkg["name"]: pkg["version"] for pkg in packages} + except Exception as e: + return str(e) + + +def format_installed_packages(packages): + return "\n".join([f"{name}: {version}" for name, version in packages.items()]) + + @app.command( help=""" GPT-engineer lets you: @@ -329,6 +360,11 @@ def main( "--no_execution", help="Run setup but to not call LLM or write any code. For testing purposes.", ), + sysinfo: bool = typer.Option( + False, + "--sysinfo", + help="Output system information for debugging", + ), ): """ The main entry point for the CLI tool that generates or improves a project. @@ -369,6 +405,8 @@ def main( Flag indicating whether to enable verbose logging. no_execution: bool Run setup but to not call LLM or write any code. For testing purposes. + sysinfo: bool + Flag indicating whether to output system information for debugging. Returns ------- @@ -380,6 +418,12 @@ def main( sys.excepthook = lambda *_: pdb.pm() + if sysinfo: + sys_info = get_system_info() + for key, value in sys_info.items(): + print(f"{key}: {value}") + raise typer.Exit() + # Validate arguments if improve_mode and (clarify_mode or lite_mode): typer.echo("Error: Clarify and lite mode are not compatible with improve mode.")