Bienvenue sur CFTPfr.fr › Forums › detecteur_materiel.py — v4 (config externalisée)
- Ce sujet est vide.
-
AuteurMessages
-
02.08.2026 à 16h48 #273
Mario Da Conceicao
Maître des clésVersion corrigée du 01/08/2026, nettoyée le 04/08/2026 : le fichier ne contient désormais QUE le code Python. Le fichier de configuration JSON a été séparé dans un sujet à part : voir « config/paliers_modele.json — fichier séparé ».
Emplacement sur la clé : mira_ai/ia_neuronale/detecteur_materiel.py
« `python
import re
import json
import shutil
from pathlib import PathBASE_DIR = Path(__file__).resolve().parent
MODELES_DIR = BASE_DIR / « modeles »
CONFIG_FILE = BASE_DIR / « config » / « paliers_modele.json »CONFIG_PAR_DEFAUT = {
« paliers »: [
{« ram_min_go »: 3, « nom »: « phi-4-mini-q4 », « fichier »: « phi-4-mini.Q4_K_M.gguf », « parametres »: « 3.8B », « taille_go »: 2.5},
],
« marge_ram_pourcentage »: 0.15,
« marge_ram_minimum_go »: 0.5
}def charger_config():
try:
with open(CONFIG_FILE, « r », encoding= »utf-8″) as f:
config = json.load(f)
if not config.get(« paliers »):
raise ValueError(« Config sans paliers. »)
return config
except Exception:
return CONFIG_PAR_DEFAUTCONFIG = charger_config()
PALIERS_MODELES = CONFIG[« paliers »]def obtenir_ram_disponible_go():
try:
with open(« /proc/meminfo », « r ») as f:
for ligne in f:
if ligne.startswith(« MemTotal: »):
kib = int(re.search(r »\d+ », ligne).group())
return round(kib / 1024 / 1024, 1)
except Exception:
pass
return Nonedef obtenir_espace_disque_go(dossier=MODELES_DIR):
try:
Path(dossier).mkdir(parents=True, exist_ok=True)
usage = shutil.disk_usage(dossier)
return round(usage.free / (1024 ** 3), 1)
except Exception:
return Nonedef calculer_marge_ram(ram_go):
return max(CONFIG[« marge_ram_minimum_go »], ram_go * CONFIG[« marge_ram_pourcentage »])def choisir_palier_modele(ram_go=None, espace_disque_go=None):
if ram_go is None:
ram_go = obtenir_ram_disponible_go()
if espace_disque_go is None:
espace_disque_go = obtenir_espace_disque_go()
if ram_go is None:
return PALIERS_MODELES[0]ram_utilisable = ram_go – calculer_marge_ram(ram_go)
palier_choisi = PALIERS_MODELES[0]
for palier in PALIERS_MODELES:
ram_ok = ram_utilisable >= palier[« ram_min_go »]
disque_ok = espace_disque_go is None or espace_disque_go >= palier[« taille_go »] * 1.5
if ram_ok and disque_ok:
palier_choisi = palier
return palier_choisidef modele_deja_present(palier):
return (MODELES_DIR / palier[« fichier »]).exists()def rapport_materiel():
ram_go = obtenir_ram_disponible_go()
disque_go = obtenir_espace_disque_go()
palier = choisir_palier_modele(ram_go, disque_go)
return (
f »RAM détectée : {ram_go if ram_go else ‘inconnue’} Go\n »
f »Espace disque disponible : {disque_go if disque_go else ‘inconnu’} Go\n »
f »Modèle sélectionné : {palier[‘nom’]} ({palier[‘parametres’]})\n »
f »Déjà installé : {‘oui’ if modele_deja_present(palier) else ‘non’} »
)
« `Points toujours refusés : psutil/multiplateforme, cache des réponses (lru_cache), NumPy/nltk/spaCy, architecture de plugins externe (pluggy), mises à jour automatiques via API externe.
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.