diff --git a/modules/ai_media.py b/modules/ai_media.py index 5704848..e1d364b 100644 --- a/modules/ai_media.py +++ b/modules/ai_media.py @@ -37,7 +37,6 @@ def generer_image_openrouter(prompt: str) -> tuple: "X-Title": "Aethas38" } - # LISTE DE REPLI (Fallback) : Maîtrise des coûts tout en évitant les crashs modeles_payants = ["bytedance-seed/seedream-4.5", "openai/dall-e-3"] for modele in modeles_payants: @@ -51,38 +50,9 @@ def generer_image_openrouter(prompt: str) -> tuple: return img_bytes, modele except Exception as e: log_event("WARNING", "MEDIA", f"Échec OpenRouter ({modele}) : {e}") - continue # Passe au modèle de secours suivant - - return None, None - -def generer_image_huggingface(prompt: str) -> tuple: - api_key = os.getenv("HUGGINGFACE_API_KEY") - if not api_key: return None, "Clé API manquante", None - - # LISTE DE REPLI HF : Modèles garantis sur le tier 100% gratuit - modeles_gratuits = [ - "runwayml/stable-diffusion-v1-5", # L'indestructible par défaut - "prompthero/openjourney", # Excellent pour un style Midjourney - "stabilityai/stable-diffusion-2-1" - ] - - for modele_cible in modeles_gratuits: - url = f"https://router.huggingface.co/hf-inference/models/{modele_cible}" - headers = {"Authorization": f"Bearer {api_key}"} - - try: - resp = requests.post(url, headers=headers, json={"inputs": prompt}, timeout=60) - if resp.status_code == 200: - return resp.content, "Succès", modele_cible - else: - log_event("WARNING", "MEDIA", f"Échec HF ({modele_cible}) : {resp.status_code} - {resp.text}") - continue # Le modèle a été rejeté, on tente immédiatement le suivant - except Exception as e: - log_event("WARNING", "MEDIA", f"Exception HF ({modele_cible}) : {str(e)}") continue - # Si la boucle se termine sans aucun succès - return None, "Tous les modèles gratuits ont été rejetés (410) ou sont indisponibles", "Inconnu" + return None, None def generer_les_images(prompt: str, fichiers: list, premium: bool) -> tuple: trace = [] @@ -95,11 +65,9 @@ def generer_les_images(prompt: str, fichiers: list, premium: bool) -> tuple: with concurrent.futures.ThreadPoolExecutor() as executor: future_or = executor.submit(generer_image_openrouter, prompt) if premium else None future_cf = executor.submit(generer_image_cloudflare, prompt) - future_hf = executor.submit(generer_image_huggingface, prompt) img_or, nom_modele_or = future_or.result() if future_or else (None, None) img_cf = future_cf.result() - img_hf, msg_hf, nom_modele_hf = future_hf.result() if future_hf else (None, None, None) dossier_media = "/DATA/AppData/MULTI-IA-AETHAS38/RAG/Media" os.makedirs(dossier_media, exist_ok=True) @@ -125,27 +93,13 @@ def generer_les_images(prompt: str, fichiers: list, premium: bool) -> tuple: nom_cf = f"img_cf_{int(time.time())}.png" with open(os.path.join(dossier_media, nom_cf), 'wb') as f: f.write(img_cf) reponse_md += f"### ☁️ Cloudflare Workers AI\n![Cloudflare](/Media/{nom_cf})\n" - reponse_md += f"**[📥 Télécharger l'image CF](/Media/{nom_cf})**\n\n---\n\n" + reponse_md += f"**[📥 Télécharger l'image CF](/Media/{nom_cf})**\n\n" fournisseurs_actifs.append("Cloudflare") trace.append("🟢 CF : Succès") else: trace.append("🔴 CF : Échec") - # --- Rendu HuggingFace Dynamique --- - if img_hf: - nom_hf = f"img_hf_{int(time.time())}.png" - with open(os.path.join(dossier_media, nom_hf), 'wb') as f: f.write(img_hf) - nom_propre = nom_modele_hf.split('/')[-1] if nom_modele_hf else "Générateur" - reponse_md += f"### 🤗 HuggingFace ({nom_propre})\n![HuggingFace](/Media/{nom_hf})\n" - reponse_md += f"**[📥 Télécharger l'image HF](/Media/{nom_hf})**\n\n" - fournisseurs_actifs.append("HuggingFace") - trace.append(f"🟢 HF ({nom_propre}) : Succès") - else: - erreur_courte = str(msg_hf)[:50] + "..." if len(str(msg_hf)) > 50 else str(msg_hf) - trace.append(f"🔴 HF : Échec ({erreur_courte})") - reponse_md += f"### 🤗 HuggingFace\n*⚠️ Échec de la génération : {msg_hf}*\n\n" - - if not img_or and not img_cf and not img_hf: + if not img_or and not img_cf: return "*Échec critique : Aucune API n'a pu générer d'image.*", "#ff4444", "Système", "Erreur", trace return reponse_md, "#00e5ff", " + ".join(fournisseurs_actifs) if fournisseurs_actifs else "Aucun", "Moteur Média", trace