import defines import re import subprocess import math from models import SystemInfo def get_installed_ram(): try: with open("/proc/meminfo", "r") as f: meminfo = f.read() match = re.search(r"MemTotal:\s+(\d+)", meminfo) if match: return f"{math.floor(int(match.group(1)) / 1000**2)}GB" # Convert KB to GB except Exception as e: return f"Error retrieving RAM: {e}" def get_graphics_cards(): gpus = [] try: # Run the ze-monitor utility result = subprocess.run( ["ze-monitor"], capture_output=True, text=True, check=True ) # Clean up the output (remove leading/trailing whitespace and newlines) output = result.stdout.strip() for index in range(len(output.splitlines())): result = subprocess.run( ["ze-monitor", "--device", f"{index+1}", "--info"], capture_output=True, text=True, check=True, ) gpu_info = result.stdout.strip().splitlines() gpu = { "discrete": True, # Assume it's discrete initially "name": None, "memory": None, } gpus.append(gpu) for line in gpu_info: match = re.match(r"^Device: [^(]*\((.*)\)", line) if match: gpu["name"] = match.group(1) continue match = re.match(r"^\s*Memory: (.*)", line) if match: gpu["memory"] = match.group(1) continue match = re.match(r"^.*Is integrated with host: Yes.*", line) if match: gpu["discrete"] = False continue return gpus except Exception as e: return f"Error retrieving GPU info: {e}" def get_cpu_info(): try: with open("/proc/cpuinfo", "r") as f: cpuinfo = f.read() model_match = re.search(r"model name\s+:\s+(.+)", cpuinfo) cores_match = re.findall(r"processor\s+:\s+\d+", cpuinfo) if model_match and cores_match: return f"{model_match.group(1)} with {len(cores_match)} cores" except Exception as e: return f"Error retrieving CPU info: {e}" def system_info() -> SystemInfo: """ Collects system information including RAM, GPU, CPU, LLM model, embedding model, and context length. Returns: SystemInfo: An object containing the collected system information. """ system = SystemInfo( installed_RAM=get_installed_ram(), graphics_cards=get_graphics_cards(), CPU=get_cpu_info(), llm_model=defines.model, embedding_model=defines.embedding_model, max_context_length=defines.max_context, ) return system