detecteur_materiel.py — v4 (config externalisée)

Bienvenue sur CFTPfr.fr Forums detecteur_materiel.py — v4 (config externalisée)

  • Ce sujet est vide.
Affichage de 1 message (sur 1 au total)
  • Auteur
    Messages
  • #273
    Mario Da Conceicao
    Maître des clés

    Version 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 Path

    BASE_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_DEFAUT

    CONFIG = 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 None

    def 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 None

    def 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_choisi

    def 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.

Affichage de 1 message (sur 1 au total)
  • Vous devez être connecté pour répondre à ce sujet.
Retour en haut