You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.7 KiB
139 lines
3.7 KiB
import platform
|
|
import subprocess
|
|
|
|
import pkg_resources
|
|
import psutil
|
|
import toml
|
|
|
|
|
|
def get_python_version():
|
|
return platform.python_version()
|
|
|
|
|
|
def get_pip_version() -> str:
|
|
"""Get pip version
|
|
|
|
Returns:
|
|
str: The version of pip installed
|
|
"""
|
|
try:
|
|
pip_version = (
|
|
subprocess.check_output(["pip", "--version"])
|
|
.decode()
|
|
.split()[1]
|
|
)
|
|
except Exception as e:
|
|
pip_version = str(e)
|
|
return pip_version
|
|
|
|
|
|
def get_swarms_verison() -> tuple[str, str]:
|
|
"""Get swarms version from both command line and package
|
|
|
|
Returns:
|
|
tuple[str, str]: A tuple containing (command line version, package version)
|
|
"""
|
|
try:
|
|
swarms_verison_cmd = (
|
|
subprocess.check_output(["swarms", "--version"])
|
|
.decode()
|
|
.split()[1]
|
|
)
|
|
except Exception as e:
|
|
swarms_verison_cmd = str(e)
|
|
swarms_verison_pkg = pkg_resources.get_distribution(
|
|
"swarms"
|
|
).version
|
|
swarms_verison = swarms_verison_cmd, swarms_verison_pkg
|
|
return swarms_verison
|
|
|
|
|
|
def get_os_version() -> str:
|
|
"""Get operating system version
|
|
|
|
Returns:
|
|
str: The operating system version and platform details
|
|
"""
|
|
return platform.platform()
|
|
|
|
|
|
def get_cpu_info() -> str:
|
|
"""Get CPU information
|
|
|
|
Returns:
|
|
str: The processor information
|
|
"""
|
|
return platform.processor()
|
|
|
|
|
|
def get_ram_info() -> str:
|
|
"""Get RAM information
|
|
|
|
Returns:
|
|
str: A formatted string containing total, used and free RAM in GB
|
|
"""
|
|
vm = psutil.virtual_memory()
|
|
used_ram_gb = vm.used / (1024**3)
|
|
free_ram_gb = vm.free / (1024**3)
|
|
total_ram_gb = vm.total / (1024**3)
|
|
return (
|
|
f"{total_ram_gb:.2f} GB, used: {used_ram_gb:.2f}, free:"
|
|
f" {free_ram_gb:.2f}"
|
|
)
|
|
|
|
|
|
def get_package_mismatches(file_path: str = "pyproject.toml") -> str:
|
|
"""Get package version mismatches between pyproject.toml and installed packages
|
|
|
|
Args:
|
|
file_path (str, optional): Path to pyproject.toml file. Defaults to "pyproject.toml".
|
|
|
|
Returns:
|
|
str: A formatted string containing package version mismatches
|
|
"""
|
|
with open(file_path) as file:
|
|
pyproject = toml.load(file)
|
|
dependencies = pyproject["tool"]["poetry"]["dependencies"]
|
|
dev_dependencies = pyproject["tool"]["poetry"]["group"]["dev"][
|
|
"dependencies"
|
|
]
|
|
dependencies.update(dev_dependencies)
|
|
|
|
installed_packages = {
|
|
pkg.key: pkg.version for pkg in pkg_resources.working_set
|
|
}
|
|
|
|
mismatches = []
|
|
for package, version_info in dependencies.items():
|
|
if isinstance(version_info, dict):
|
|
version_info = version_info["version"]
|
|
installed_version = installed_packages.get(package)
|
|
if installed_version and version_info.startswith("^"):
|
|
expected_version = version_info[1:]
|
|
if not installed_version.startswith(expected_version):
|
|
mismatches.append(
|
|
f"\t {package}: Mismatch,"
|
|
f" pyproject.toml={expected_version},"
|
|
f" pip={installed_version}"
|
|
)
|
|
else:
|
|
mismatches.append(f"\t {package}: Not found in pip list")
|
|
|
|
return "\n" + "\n".join(mismatches)
|
|
|
|
|
|
def system_info() -> dict[str, str]:
|
|
"""Get system information including Python, pip, OS, CPU and RAM details
|
|
|
|
Returns:
|
|
dict[str, str]: A dictionary containing system information
|
|
"""
|
|
return {
|
|
"Python Version": get_python_version(),
|
|
"Pip Version": get_pip_version(),
|
|
# "Swarms Version": swarms_verison,
|
|
"OS Version and Architecture": get_os_version(),
|
|
"CPU Info": get_cpu_info(),
|
|
"RAM Info": get_ram_info(),
|
|
}
|