NEXON / backend /utils /hardware.py
Antigravity
initial clean push: N-A finalized build
5fe93dd
import subprocess
import re
def check_hardware() -> dict:
# Auto-detect available VRAM via subprocess nvidia-smi call
vram_total_mb = 0
vram_used_mb = 0
vram_free_mb = 0
gpu_utilization = 0
use_gpu = False
try:
# Query total, used, free and utilization
result = subprocess.run(
['nvidia-smi', '--query-gpu=memory.total,memory.used,memory.free,utilization.gpu', '--format=csv,noheader,nounits'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
if result.returncode == 0:
lines = result.stdout.strip().split('\n')
if lines:
parts = [p.strip() for p in lines[0].split(',')]
if len(parts) >= 4:
vram_total_mb = int(parts[0])
vram_used_mb = int(parts[1])
vram_free_mb = int(parts[2])
gpu_utilization = int(parts[3])
use_gpu = True
except FileNotFoundError:
pass
except Exception:
pass
vram_available_gb = vram_free_mb / 1024.0
# If VRAM < 3GB available, set num_gpu=0 in Ollama
if use_gpu and vram_available_gb < 3.0:
use_gpu = False
return {
"vram_available_gb": round(vram_available_gb, 2),
"vram_total_gb": round(vram_total_mb / 1024.0, 2),
"vram_used_gb": round(vram_used_mb / 1024.0, 2),
"gpu_utilization": gpu_utilization,
"use_gpu": use_gpu
}