From f966ce7bde06a425e2a4c8cad55cf4ccbfdca612 Mon Sep 17 00:00:00 2001 From: Xavier Date: Tue, 18 Aug 2026 16:04:58 +0200 Subject: [PATCH] maj auto 2 --- README.md | 79 ++++++++++++++++++----------------------- modules/debug_mailer.py | 64 +++++++++++++++++++++++++++++++++ modules/logger.py | 32 ++++++++++++----- 3 files changed, 122 insertions(+), 53 deletions(-) create mode 100644 modules/debug_mailer.py diff --git a/README.md b/README.md index be8d76d..3c12a22 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,57 @@ -# Aethas38 - Multi-IA Orchestrateur (Minecraft-Tech Edition) +# Multi-IA Orchestrateur Plateforme SaaS d'IA modulaire : Orchestrateur local, routeur intelligent, sécurisé et facturable. - -**Architecture réseau :** Déploiement via Docker derrière Nginx Proxy Manager (NPM) sur `https://ia.votre-domaine.com`. ## 📜 Licence & Droits d'Utilisation (EULA) -Ce projet est distribué sous une licence "Source Available" propriétaire (EULA) rédigée par Xavier Fernandez (Aethas38). +Ce projet est distribué sous une licence "Source Available" propriétaire (EULA). * **Modifications & Partage :** Les utilisateurs sont autorisés à modifier et améliorer le code, à condition de partager ces améliorations avec la communauté. -* **Restrictions strictes :** Il est **strictement interdit** de modifier ou supprimer les crédits de l'auteur originel, de retirer le module de dons dédié au créateur, ou de désactiver la télémétrie de sécurité (notification d'installation avec IP/Nom admin envoyée à `admin@mail.aethas38.duckdns.org`). L'installation requiert l'acceptation explicite de ces termes. -* **Donations obligatoires :** Le système intègre nativement deux modules de dons. L'un est modifiable par l'hébergeur du projet. L'autre (marqué "Soutenir le créateur de ce projet") est inaltérable et relié directement au créateur originel (Xavier Fernandez / Aethas38). Le retrait de ce module est une violation stricte de cette licence. +* **Restrictions strictes :** Il est **strictement interdit** de modifier ou supprimer les crédits de l'auteur originel, de retirer le module de dons dédié au créateur, ou de désactiver la télémétrie de sécurité à l'installation. L'installation requiert l'acceptation explicite de ces termes. +* **Donations obligatoires :** Le système intègre nativement deux modules de dons. L'un est modifiable par l'hébergeur du projet. L'autre (marqué "Soutenir le créateur de ce projet") est inaltérable et relié directement au créateur originel. Le retrait de ce module est une violation stricte de cette licence. + +## ⚠️ Pré-requis Matériels (Important) +Pour fonctionner de manière optimale, l'Orchestrateur Local nécessite au minimum **une carte graphique avec 4 Go de VRAM dédiée**. Il est possible de configurer l'application pour utiliser le CPU, mais les performances seront considérablement réduites et les temps de réponse allongés. **L'auteur décline toute responsabilité en cas de surcharge matérielle liée à une utilisation CPU intensive.** ## 📋 To-Do List (Roadmap) ### Phase 1 & 2 : Infrastructure & Backend de Base ✅ -- [x] Installation Docker, Nginx (NPM), Pare-feu, Gitea/GitHub -- [x] Serveur Local Ollama (Qwen 3B) + FastHTML (Adapté aux processeurs limités type AMD Phenom) -- [x] Routeur Multi-IA (OpenRouter, Gemini, Local) avec système de cascade et directives d'aiguillage strictes +- [x] Installation Docker, Pare-feu +- [x] Serveur Local Ollama + FastHTML +- [x] Routeur Multi-IA (OpenRouter, Gemini, Local) avec système de cascade - [x] Continuité de service : IA de secours automatique ### Phase 3 : Refonte UI & Expérience Utilisateur ✅ - [x] Thème "Minecraft-Tech" (Inspiré serveurs/redstone) compatible Mobile (Responsive) -- [x] Historique (Sidebar) avec Renommage, Épinglage, Suppression et Navigation isolée par session -- [x] Zone de saisie intelligente (Textarea auto-adaptatif, Drag & Drop avec pills/miniatures, Collage multi-fichiers jusqu'à 10) -- [x] Export modulaire et propre (PDF, DOC, TXT, JSON, ZIP) -- [x] Boutons de partage direct (WhatsApp, Email) -- [x] Indicateur d'avancement dynamique (Loader Néon) pendant le traitement des IA +- [x] Historique (Sidebar) avec Renommage, Épinglage, Suppression et Navigation isolée +- [x] Zone de saisie intelligente (Drag & Drop, multi-fichiers) +- [x] Export modulaire (PDF, DOC, TXT, JSON, ZIP) - [x] Architecture modulaire propre (Dossier `modules/`) ### Phase 4 : Gestion des Utilisateurs & Sécurité Légale -- [ ] Mettre en place une bibliothèque logicielle autonome sur le serveur (création PDF, DOCX, etc.). +- [ ] Mettre en place une bibliothèque logicielle autonome sur le serveur. - [ ] Routage automatique (Gratuit vs Payant) sélectionné par l'utilisateur. -- [ ] Système de connexion sécurisé avec configuration du premier lancement (DOB depuis 1900, Email, Clés API). L'utilisateur Xavier a obligatoirement le rôle "Dieu tout puissant" "Humour 😜" (Admin global). -- [x] Système de cryptage de grade militaire (Fernet) et de Hashing (Bcrypt) mis en place (Module `auth_manager.py`). -- [X] Sécurité Légère : Fail2Ban, protection Bruteforce et DDoS. **Blocage total des accès VPN**. -- [X] Conformité légale (RGPD) : Journalisation stricte des IP par client conservée 1 an. -- [ ] Multilinguisme : Adaptation automatique de la langue du site via la géolocalisation de l'IP. +- [ ] Système de connexion sécurisé avec configuration du premier lancement. +- [x] Système de cryptage avancé (Fernet) et de Hashing (Bcrypt) mis en place. +- [x] Sécurité : Protection Bruteforce. **Blocage total des accès VPN/Proxy**. +- [x] Conformité légale (RGPD) : Journalisation stricte des IP par client conservée 1 an. +- [ ] Multilinguisme : Adaptation automatique de la langue du site via IP. -### Phase 5 : Sécurité Financière & Facturation Exacte 💰 - -- [x] Pré-calcul local du nombre de tokens (via `tiktoken`) pour estimer le coût avant envoi (Module `billing_manager.py`). Bloquage automatique si coût > 0. -- [ ] Interface UI : Affichage du Pop-Up de validation du coût pour l'utilisateur. -- [ ] Cryptage absolu de toutes les données sensibles et bancaires. -- [ ] Module de conversion des devises en temps réel (Taux du jour) pour un affichage transparent. -- [ ] **Utilisateurs Privilégiés (Zéro Marge) :** Xavier, Céline, Anaëlle, Renan et Audric. Autorisation de virements manuels pour la cagnotte. -- [x] **Marge Commerciale :** Majoration automatique appliquée selon les statuts de l'auto-entreprise pour générer le Prix Facture HT. -- [ ] Export comptable Excel (TCD) par utilisateur via Pandas/Openpyxl et archivage PDF automatisé. +### Phase 5 : Sécurité Financière & Facturation 💰 +- [x] Pré-calcul local du nombre de tokens (via `tiktoken`) pour estimer le coût avant envoi. +- [ ] Interface UI : Affichage du Pop-Up de validation du coût. +- [ ] Cryptage absolu des données sensibles bancaires. +- [ ] Module de conversion des devises en temps réel. +- [x] **Gestionnaire Financier :** Majoration automatique appliquée selon les statuts pour générer la facturation finale. +- [ ] Export comptable Excel (TCD) avec archivage PDF automatisé (Admin uniquement). ### Phase 6 : Nouvelles Capacités IA (Spécialisations & Modèles) 🤖 -*Note : L'infrastructure bascule sur OpenRouter pour palier aux décommissionnements constants des autres fournisseurs.* -| Domaine de tâche | Modèle / Moteur | Fournisseur / Hébergement | Rôle principal | -| :--- | :--- | :--- | :--- | -| **Orchestration & Tri** | Qwen 2.5 (3B) | Local (GTX 1650 / Ollama) | Analyse l'intention, gère le chat rapide et route vers la bonne IA | -| **Bureautique & Code** | Llama 3.1 / Qwen 2.5 Coder | OpenRouter API (Gratuit) | Programmation, scripts, macros VBA, mathématiques | -| **Images HD / Fichiers** | Gemini 2.0 Flash / Pro | Google AI Studio | Analyse d'images/vidéos et documents joints | -| **Génération Multimédia** | Stable Diffusion / Flux / Luma | HuggingFace / Fal.ai | Création d'images et vidéos (Text-to-Image / Text-to-Video) | +| Domaine de tâche | Moteur | Rôle principal | +| :--- | :--- | :--- | +| **Orchestration & Tri** | Local (Ollama) | Analyse l'intention, gère le chat rapide et route vers la bonne IA | +| **Bureautique & Code** | OpenRouter API | Programmation, scripts, macros VBA, mathématiques | +| **Images HD / Fichiers** | Google API | Analyse d'images/vidéos et documents joints | +| **Génération Multimédia** | HuggingFace / Fal.ai | Création d'images et vidéos (Text-to-Image / Text-to-Video) | ### Phase 7 & 8 : Maintenance & Déploiement -- [ ] Script de surveillance de l'espace disque du serveur (Beszel / Psutil) réservé à l'Admin. -- [x] Configuration du Webhook et script Bash de déploiement automatique ciblant la stack `AETHAS38_MULTI_IA` via Gitea. -- [ ] Déploiement du conteneur Aethas38 derrière Nginx Proxy Manager (NPM). -- [ ] Sauvegarde automatique : Compression du site toutes les 6 heures vers GDrive (`25-BACKUP SITE`), 4 versions conservées. -- [x] Hébergement sur Gitea/Github des versions Docker. Configuration du fichier `docker-compose.yml` et `Dockerfile` réalisée. -- [ ] Création d'un Wiki détaillé multilingue pour l'installation personnelle. - -## 📷 Vidéosurveillance & Détection Intelligente -*(Voir configuration Frigate locale et Google Coral TPU existante)* \ No newline at end of file +- [ ] Création d'un Wiki d'installation détaillé multilingue. +- [x] Fichiers `docker-compose.yml` et `Dockerfile` préparés pour le déploiement conteneurisé. \ No newline at end of file diff --git a/modules/debug_mailer.py b/modules/debug_mailer.py new file mode 100644 index 0000000..fb5aa98 --- /dev/null +++ b/modules/debug_mailer.py @@ -0,0 +1,64 @@ +import os +import smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from modules.logger import log_event + +# Option de désactivation depuis l'interface (Phase Debug) +DEBUG_MAIL_ACTIVE = True + +def envoyer_alerte_debug(niveau, source, message_erreur): + """ + Envoie un e-mail à l'administrateur en cas d'erreur serveur (Phase Debug). + Utilise le serveur SMTP défini dans le .env + """ + if not DEBUG_MAIL_ACTIVE: + return + + # L'adresse de l'administrateur est configurée via l'interface (ou le .env) + email_admin = os.getenv("ADMIN_EMAIL", "votre-email@domaine.com") + smtp_serveur = os.getenv("SMTP_SERVER") + smtp_port = int(os.getenv("SMTP_PORT", 587)) + smtp_user = os.getenv("SMTP_USER") + smtp_pass = os.getenv("SMTP_PASS") + + if not all([smtp_serveur, smtp_user, smtp_pass]): + log_event("WARNING", "DEBUG_MAILER", "Configuration SMTP absente. Impossible d'envoyer l'alerte.") + return + + sujet = f"[ALERTE {niveau}] Aethas38_Multi_IA - Erreur dans {source}" + corps_html = f""" + + +

Alerte Serveur - Aethas38

+

Niveau : {niveau}

+

Module/Source : {source}

+

Détail de l'erreur :

+
+ {message_erreur} +
+
+

Notification automatique de l'Orchestrateur (Phase Debug)

+ + + """ + + msg = MIMEMultipart() + msg['From'] = smtp_user + msg['To'] = email_admin + msg['Subject'] = sujet + msg.attach(MIMEText(corps_html, 'html')) + + try: + server = smtplib.SMTP(smtp_serveur, smtp_port) + server.starttls() + server.login(smtp_user, smtp_pass) + server.send_message(msg) + server.quit() + # On ne loggue pas la réussite de l'envoi pour éviter une boucle infinie de logs + except Exception as e: + # Affichage terminal pur pour éviter la boucle d'erreurs + print(f"ÉCHEC CRITIQUE : Impossible d'envoyer l'alerte e-mail : {e}") + +# Pour connecter ce module au logger existant, il suffira d'importer cette fonction +# dans modules/logger.py et de l'appeler si niveau in ["ERROR", "CRITICAL"]. \ No newline at end of file diff --git a/modules/logger.py b/modules/logger.py index d47b38f..7371cdc 100644 --- a/modules/logger.py +++ b/modules/logger.py @@ -1,15 +1,31 @@ -# modules/logger.py -import datetime import os +from datetime import datetime +from modules.debug_mailer import envoyer_alerte_debug +# Le fichier de destination pour les logs locaux LOG_FILE = "aethas_logs.txt" -def log_event(niveau, fournisseur, message): - """Enregistre un événement ou une erreur dans le fichier de log.""" - timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - log_entry = f"[{timestamp}] [{niveau.upper()}] [{fournisseur.upper()}] {message}\n" +def log_event(niveau, source, message): + """ + Enregistre un événement dans le fichier de log local. + Déclenche l'envoi d'un e-mail si le niveau est ERROR ou CRITICAL. + """ + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + log_line = f"[{timestamp}] [{niveau}] [{source}] {message}\n" + + # 1. Écriture sécurisée dans le fichier de log local try: with open(LOG_FILE, "a", encoding="utf-8") as f: - f.write(log_entry) + f.write(log_line) except Exception as e: - print(f"Erreur d'écriture des logs : {e}") \ No newline at end of file + print(f"ÉCHEC D'ÉCRITURE LOG : Impossible d'écrire dans {LOG_FILE} : {e}") + + # 2. Déclenchement de l'alerte e-mail pour la phase de Debug + # Les niveaux peuvent être ajustés (ex: ajouter "WARNING" si vous souhaitez plus d'alertes) + if niveau in ["ERROR", "CRITICAL"]: + try: + # Appel du second module pour gérer l'envoi + envoyer_alerte_debug(niveau, source, message) + except Exception as mail_error: + # On print l'erreur dans la console hôte pour ne pas faire planter l'application + print(f"ÉCHEC D'ENVOI E-MAIL : Impossible d'avertir l'administrateur : {mail_error}") \ No newline at end of file