import os import json import requests import threading import time from modules.logger import log_event CATALOGUE_FILE = "/DATA/AppData/MULTI-IA-AETHAS38/catalogue_dynamique.json" def _do_update(): ollama_host = os.getenv("OLLAMA_HOST", "http://192.168.1.20:11434") try: # MAJ locale Abliterated resp_local = requests.post( f"{ollama_host}/api/pull", json={"name": "richardyoung/llama-3.2-3b-instruct-abliterated"}, timeout=300 ) if resp_local.status_code == 200: log_event("INFO", "UPDATER", "Modèle local Abliterated vérifié/mis à jour.") # MAJ DU CATALOGUE COMPLET OPENROUTER resp_or = requests.get("https://openrouter.ai/api/v1/models", timeout=30) if resp_or.status_code == 200: data = resp_or.json().get("data", []) modeles_gratuits = [] modeles_payants = [] for m in data: pricing = m.get("pricing", {}) # S'il est 100% gratuit if pricing.get("prompt") == "0" and pricing.get("completion") == "0": if "nvidia/nemotron" not in m["id"].lower(): # On garde juste cette exclusion sécurité modeles_gratuits.append(m["id"]) else: # On intègre TOUS les modèles payants (Texte, Vision, 3D, etc.) modeles_payants.append(m["id"]) with open(CATALOGUE_FILE, "w", encoding="utf-8") as f: json.dump({"free_models": modeles_gratuits, "paid_models": modeles_payants}, f) log_event("INFO", "UPDATER", f"Catalogue Global mis à jour : {len(modeles_gratuits)} gratuits, {len(modeles_payants)} payants détectés.") except Exception as e: log_event("ERROR", "UPDATER", f"Erreur lors de la MAJ auto : {e}") def trigger_update_now(): threading.Thread(target=_do_update, daemon=True).start() def update_models_background(): _do_update() while True: time.sleep(7200) # Attente 2 heures _do_update() threading.Thread(target=update_models_background, daemon=True).start()