diagnostics

added colour identifiers to the output on screen.
This commit is contained in:
erew123 authored and GitHub committed 2023-12-20 02:18:43 +00:00
1 parent 96aef2c1be
commit c9b82034f0
1 file changed
+88 -15
+88 -15
View File
@@ -2,9 +2,14 @@ try:
import platform
import subprocess
import logging
from importlib_metadata import distribution, distributions
from importlib_metadata import distributions
import torch
import os # Import the os module
import re
import glob
import textwrap
import packaging.version
import packaging.specifiers
except ImportError as e:
print(f"\033[91mError importing module: {e}\033[0m\n")
print("\033[94mPlease ensure you started the Text-generation-webUI Python environment with either\033[0m")
@@ -19,8 +24,25 @@ except ImportError:
subprocess.run(['pip', 'install', 'psutil'])
import psutil
# Additional import for torch
import torch
def get_requirements_file():
requirements_files = glob.glob("requirements*.txt")
if not requirements_files:
print("\033[91mNo requirements files found.\033[0m")
return None
print("\033[94m\nSelect a requirements file to check against (or press Enter for default 'requirements.txt'):\033[0m\n")
for i, file in enumerate(requirements_files, start=1):
print(f"{i}. {file}")
choice = input("\nEnter the number of your choice: ")
try:
choice = int(choice) - 1
return requirements_files[choice]
except (ValueError, IndexError):
return "requirements.txt"
# Set up logging with filemode='w'
logging.basicConfig(filename='diagnostics.log', filemode='w', level=logging.INFO)
# Function to get GPU information using subprocess
def get_gpu_info():
@@ -75,34 +97,85 @@ def log_system_info():
# Package versions using importlib_metadata
package_versions = {d.metadata['Name']: d.version for d in distributions()}
# Compare with requirements file
requirements_file = get_requirements_file()
if requirements_file:
required_packages = {}
installed_packages = {}
try:
with open(requirements_file, 'r') as req_file:
requirements = [line.strip() for line in req_file]
for req in requirements:
# Use regular expression to parse package name and version
match = re.match(r'([^\s>=]+)\s*([>=<]+)\s*([^,]+)', req)
if match:
package_name, operator, version_spec = match.groups()
installed_version = package_versions.get(package_name, 'Not installed')
if installed_version != 'Not installed':
required_packages[package_name] = (operator, version_spec)
installed_packages[package_name] = installed_version
except FileNotFoundError:
print(f"\n{requirements_file} not found. Skipping version checks.")
logging.info(f"NOTE {requirements_file} not found. Skipping version checks.")
# Log and print information
logging.info(f"OS Version: {os_version}")
logging.info(f"Note: Windows 11 does call itself 10")
logging.info(f"Note: Windows 11 build is 10.x.22xxx")
logging.info(f"Python Version: {python_version}")
logging.info(f"Torch Version: {torch_version}")
logging.info(f"System RAM: {system_ram}")
logging.info(f"Total System RAM: {total_ram}")
logging.info(f"Available System RAM: {available_ram}")
logging.info(f"CUDA_HOME: {cuda_home}")
logging.info(f"\nPort Status: {port_status}")
logging.info(f"Port Status: {port_status}")
if required_packages: # Check if the dictionary is not empty
logging.info("Package Versions:")
max_package_length = max(len(package) for package in required_packages.keys())
for package_name, (operator, required_version) in required_packages.items():
installed_version = installed_packages.get(package_name, 'Not installed')
logging.info(f"{package_name.ljust(max_package_length)} Required: {operator} {required_version.ljust(12)} Installed: {installed_version}")
logging.info(f"GPU Information:\n{gpu_info}")
logging.info("Package Versions:")
for package, version in package_versions.items():
logging.info(f"{package}>= {version}")
# Print to screen
print(f"\033[94mOS Version:\033[0m \033[92m{os_version}\033[0m")
print(f"\033[94mNote:\033[0m \033[92mWindows 11 does call itself 10\033[0m")
print(f"\033[94mPython Version:\033[0m \033[92m{python_version}\033[0m")
print(f"\033[94mTorch Version:\033[0m \033[92m{torch_version}\033[0m")
print(f"\033[94mSystem RAM:\033[0m \033[92m{system_ram}\033[0m")
print(f"\033[94mTotal System RAM:\033[0m \033[92m{total_ram}\033[0m")
print(f"\033[94mAvailable System RAM:\033[0m \033[92m{available_ram}\033[0m")
print(f"\n\033[94mOS Version:\033[0m \033[92m{os_version}\033[0m")
print(f"\033[94mOS Ver note:\033[0m \033[92mWindows 11 build is 10.x.22xxx\033[0m")
print(f"\033[94mCUDA_HOME:\033[0m \033[92m{cuda_home}\033[0m")
print(f"\033[94mSystem RAM:\033[0m \033[92m{system_ram}\033[0m")
print(f"\033[94mPort Status:\033[0m \033[92m{port_status}\033[0m")
print(f"\033[94mTorch Version:\033[0m \033[92m{torch_version}\033[0m")
print(f"\033[94mPython Version:\033[0m \033[92m{python_version}\033[0m")
if required_packages: # Check if the dictionary is not empty
print("\033[94m\nRequirements file package comparison:\033[0m")
max_package_length = max(len(package) for package in required_packages.keys())
for package_name, (operator, required_version) in required_packages.items():
installed_version = installed_packages.get(package_name, 'Not installed')
# Compare versions using packaging.version
required = packaging.version.parse(required_version)
installed = packaging.version.parse(installed_version)
# Set color based on version comparison
condition_met = eval(f"installed {operator} required")
color_required = "\033[92m" if condition_met else "\033[91m"
color_installed = "\033[92m" if condition_met else "\033[91m"
# Print colored output
print(f"{package_name.ljust(max_package_length)} Required: {color_required}{operator} {required_version.ljust(12)}\033[0m Installed: {color_installed}{installed_version}\033[0m")
print("\033[94m\nRequirements file specifier meanings:\033[0m")
explanation = textwrap.dedent("""
== Exact version != Any version except < Less than
<= Less than or equal to > Greater than >= Greater than or equal to
~ Compatible release ; Environment marker AND Logical AND
OR Logical OR
""")
print(explanation.strip())
print("")
print(f"GPU Information:{gpu_info}")
print(f"\033[94mDiagnostic log created:\033[0m \033[92mdiagnostics.log\033[0m")
print(f"\033[94mPlease upload the log file with any support ticket.\033[0m")
if __name__ == "__main__":
log_system_info()
log_system_info()