comment out sys_info

pull/339/head
evelynmitchell 1 year ago
parent b08cd06a76
commit 41344a625e

@ -1,158 +1,158 @@
import platform # import platform
import subprocess # import subprocess
import pkg_resources # import pkg_resources
import psutil # import psutil
import toml # import toml
def get_python_version(): # def get_python_version():
return platform.python_version() # return platform.python_version()
def get_pip_version(): # def get_pip_version():
try: # try:
pip_version = ( # pip_version = (
subprocess.check_output(["pip", "--version"]) # subprocess.check_output(["pip", "--version"])
.decode() # .decode()
.split()[1] # .split()[1]
) # )
except Exception as e: # except Exception as e:
pip_version = str(e) # pip_version = str(e)
return pip_version # return pip_version
def get_oi_version(): # def get_oi_version():
try: # try:
oi_version_cmd = ( # oi_version_cmd = (
subprocess.check_output(["interpreter", "--version"]) # subprocess.check_output(["interpreter", "--version"])
.decode() # .decode()
.split()[1] # .split()[1]
) # )
except Exception as e: # except Exception as e:
oi_version_cmd = str(e) # oi_version_cmd = str(e)
oi_version_pkg = pkg_resources.get_distribution( # oi_version_pkg = pkg_resources.get_distribution(
"open-interpreter" # "open-interpreter"
).version # ).version
oi_version = oi_version_cmd, oi_version_pkg # oi_version = oi_version_cmd, oi_version_pkg
return oi_version # return oi_version
def get_os_version(): # def get_os_version():
return platform.platform() # return platform.platform()
def get_cpu_info(): # def get_cpu_info():
return platform.processor() # return platform.processor()
def get_ram_info(): # def get_ram_info():
vm = psutil.virtual_memory() # vm = psutil.virtual_memory()
used_ram_gb = vm.used / (1024**3) # used_ram_gb = vm.used / (1024**3)
free_ram_gb = vm.free / (1024**3) # free_ram_gb = vm.free / (1024**3)
total_ram_gb = vm.total / (1024**3) # total_ram_gb = vm.total / (1024**3)
return ( # return (
f"{total_ram_gb:.2f} GB, used: {used_ram_gb:.2f}, free:" # f"{total_ram_gb:.2f} GB, used: {used_ram_gb:.2f}, free:"
f" {free_ram_gb:.2f}" # f" {free_ram_gb:.2f}"
) # )
def get_package_mismatches(file_path="pyproject.toml"): # def get_package_mismatches(file_path="pyproject.toml"):
with open(file_path, "r") as file: # with open(file_path, "r") as file:
pyproject = toml.load(file) # pyproject = toml.load(file)
dependencies = pyproject["tool"]["poetry"]["dependencies"] # dependencies = pyproject["tool"]["poetry"]["dependencies"]
dev_dependencies = pyproject["tool"]["poetry"]["group"]["dev"][ # dev_dependencies = pyproject["tool"]["poetry"]["group"]["dev"][
"dependencies" # "dependencies"
] # ]
dependencies.update(dev_dependencies) # dependencies.update(dev_dependencies)
installed_packages = { # installed_packages = {
pkg.key: pkg.version for pkg in pkg_resources.working_set # pkg.key: pkg.version for pkg in pkg_resources.working_set
} # }
mismatches = [] # mismatches = []
for package, version_info in dependencies.items(): # for package, version_info in dependencies.items():
if isinstance(version_info, dict): # if isinstance(version_info, dict):
version_info = version_info["version"] # version_info = version_info["version"]
installed_version = installed_packages.get(package) # installed_version = installed_packages.get(package)
if installed_version and version_info.startswith("^"): # if installed_version and version_info.startswith("^"):
expected_version = version_info[1:] # expected_version = version_info[1:]
if not installed_version.startswith(expected_version): # if not installed_version.startswith(expected_version):
mismatches.append( # mismatches.append(
f"\t {package}: Mismatch," # f"\t {package}: Mismatch,"
f" pyproject.toml={expected_version}," # f" pyproject.toml={expected_version},"
f" pip={installed_version}" # f" pip={installed_version}"
) # )
else: # else:
mismatches.append(f"\t {package}: Not found in pip list") # mismatches.append(f"\t {package}: Not found in pip list")
return "\n" + "\n".join(mismatches) # return "\n" + "\n".join(mismatches)
def interpreter_info(interpreter): # def interpreter_info(interpreter):
try: # try:
if interpreter.offline and interpreter.llm.api_base: # if interpreter.offline and interpreter.llm.api_base:
try: # try:
curl = subprocess.check_output( # curl = subprocess.check_output(
f"curl {interpreter.llm.api_base}" # f"curl {interpreter.llm.api_base}"
) # )
except Exception as e: # except Exception as e:
curl = str(e) # curl = str(e)
else: # else:
curl = "Not local" # curl = "Not local"
messages_to_display = [] # messages_to_display = []
for message in interpreter.messages: # for message in interpreter.messages:
message = message.copy() # message = message.copy()
try: # try:
if len(message["content"]) > 600: # if len(message["content"]) > 600:
message["content"] = ( # message["content"] = (
message["content"][:300] # message["content"][:300]
+ "..." # + "..."
+ message["content"][-300:] # + message["content"][-300:]
) # )
except KeyError as e: # except KeyError as e:
print(f"KeyError {str(e)} for message: {message}") # print(f"KeyError {str(e)} for message: {message}")
messages_to_display.append(message) # messages_to_display.append(message)
return f""" # return f"""
# Interpreter Info # # Interpreter Info
Vision: {interpreter.llm.supports_vision} # Vision: {interpreter.llm.supports_vision}
Model: {interpreter.llm.model} # Model: {interpreter.llm.model}
Function calling: {interpreter.llm.supports_functions} # Function calling: {interpreter.llm.supports_functions}
Context window: {interpreter.llm.context_window} # Context window: {interpreter.llm.context_window}
Max tokens: {interpreter.llm.max_tokens} # Max tokens: {interpreter.llm.max_tokens}
Auto run: {interpreter.auto_run} # Auto run: {interpreter.auto_run}
API base: {interpreter.llm.api_base} # API base: {interpreter.llm.api_base}
Offline: {interpreter.offline} # Offline: {interpreter.offline}
Curl output: {curl} # Curl output: {curl}
# Messages # # Messages
System Message: {interpreter.system_message} # System Message: {interpreter.system_message}
""" + "\n\n".join([str(m) for m in messages_to_display]) # """ + "\n\n".join([str(m) for m in messages_to_display])
except AttributeError as e: # except AttributeError as e:
return f"Error, couldn't get interpreter info: {str(e)}" # return f"Error, couldn't get interpreter info: {str(e)}"
def system_info(interpreter): # def system_info(interpreter):
oi_version = get_oi_version() # oi_version = get_oi_version()
print(f""" # print(f"""
Python Version: {get_python_version()} # Python Version: {get_python_version()}
Pip Version: {get_pip_version()} # Pip Version: {get_pip_version()}
Open-interpreter Version: cmd:{oi_version[0]}, pkg: {oi_version[1]} # Open-interpreter Version: cmd:{oi_version[0]}, pkg: {oi_version[1]}
OS Version and Architecture: {get_os_version()} # OS Version and Architecture: {get_os_version()}
CPU Info: {get_cpu_info()} # CPU Info: {get_cpu_info()}
RAM Info: {get_ram_info()} # RAM Info: {get_ram_info()}
{interpreter_info(interpreter)} # {interpreter_info(interpreter)}
""") # """)
# Removed the following, as it causes `FileNotFoundError: [Errno 2] No such file or directory: 'pyproject.toml'`` on prod # # Removed the following, as it causes `FileNotFoundError: [Errno 2] No such file or directory: 'pyproject.toml'`` on prod
# (i think it works on dev, but on prod the pyproject.toml will not be in the cwd. might not be accessible at all) # # (i think it works on dev, but on prod the pyproject.toml will not be in the cwd. might not be accessible at all)
# Package Version Mismatches: # # Package Version Mismatches:
# {get_package_mismatches()} # # {get_package_mismatches()}

@ -1,37 +1,37 @@
"""Tests for the sys_info module.""" """Tests for the sys_info module."""
import pytest # import pytest
from unittest.mock import Mock # from unittest.mock import Mock
from sys_info import interpreter_info, system_info # from sys_info import interpreter_info, system_info
def test_interpreter_info(mocker): # def test_interpreter_info(mocker):
"""Test interpreter_info.""" # """Test interpreter_info."""
mocker.patch('subprocess.check_output', return_value='curl output') # mocker.patch('subprocess.check_output', return_value='curl output')
interpreter = Mock() # interpreter = Mock()
interpreter.offline = True # interpreter.offline = True
interpreter.llm.api_base = 'http://api_base' # interpreter.llm.api_base = 'http://api_base'
interpreter.llm.supports_vision = True # interpreter.llm.supports_vision = True
interpreter.llm.model = 'model' # interpreter.llm.model = 'model'
interpreter.llm.supports_functions = True # interpreter.llm.supports_functions = True
interpreter.llm.context_window = 'context_window' # interpreter.llm.context_window = 'context_window'
interpreter.llm.max_tokens = 100 # interpreter.llm.max_tokens = 100
interpreter.auto_run = True # interpreter.auto_run = True
interpreter.llm.api_base = 'http://api_base' # interpreter.llm.api_base = 'http://api_base'
interpreter.offline = True # interpreter.offline = True
interpreter.system_message = 'system_message' # interpreter.system_message = 'system_message'
interpreter.messages = [{'content': 'message_content'}] # interpreter.messages = [{'content': 'message_content'}]
result = interpreter_info(interpreter) # result = interpreter_info(interpreter)
assert 'curl output' in result # assert 'curl output' in result
def test_system_info(mocker): # def test_system_info(mocker):
"""Test system_info.""" # """Test system_info."""
mocker.patch('your_module.get_oi_version', return_value=('cmd_version', 'pkg_version')) # replace with your actual module name # mocker.patch('your_module.get_oi_version', return_value=('cmd_version', 'pkg_version')) # replace with your actual module name
mocker.patch('your_module.get_python_version', return_value='python_version') # replace with your actual module name # mocker.patch('your_module.get_python_version', return_value='python_version') # replace with your actual module name
mocker.patch('your_module.get_pip_version', return_value='pip_version') # replace with your actual module name # mocker.patch('your_module.get_pip_version', return_value='pip_version') # replace with your actual module name
mocker.patch('your_module.get_os_version', return_value='os_version') # replace with your actual module name # mocker.patch('your_module.get_os_version', return_value='os_version') # replace with your actual module name
mocker.patch('your_module.get_cpu_info', return_value='cpu_info') # replace with your actual module name # mocker.patch('your_module.get_cpu_info', return_value='cpu_info') # replace with your actual module name
mocker.patch('your_module.get_ram_info', return_value='ram_info') # replace with your actual module name # mocker.patch('your_module.get_ram_info', return_value='ram_info') # replace with your actual module name
mocker.patch('your_module.interpreter_info', return_value='interpreter_info') # replace with your actual module name # mocker.patch('your_module.interpreter_info', return_value='interpreter_info') # replace with your actual module name
interpreter = Mock() # interpreter = Mock()
result = system_info(interpreter) # result = system_info(interpreter)
assert 'interpreter_info' in result # assert 'interpreter_info' in result
Loading…
Cancel
Save