Public Access
maj auto 2
This commit is contained in:
1 parent
7ea3c603bb
commit
f966ce7bde
3 files changed
+122
-53
No files matched your search
@@ -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.
|
Plateforme SaaS d'IA modulaire : Orchestrateur local, routeur intelligent, sécurisé et facturable.
|
||||||
<!-- MAJ 18/08/2026 : URL de production masquée pour raisons de cybersécurité -->
|
|
||||||
**Architecture réseau :** Déploiement via Docker derrière Nginx Proxy Manager (NPM) sur `https://ia.votre-domaine.com`.
|
|
||||||
|
|
||||||
## 📜 Licence & Droits d'Utilisation (EULA)
|
## 📜 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é.
|
* **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.
|
* **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 (Xavier Fernandez / Aethas38). Le retrait de ce module est une violation stricte de cette licence.
|
* **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)
|
## 📋 To-Do List (Roadmap)
|
||||||
|
|
||||||
### Phase 1 & 2 : Infrastructure & Backend de Base ✅
|
### Phase 1 & 2 : Infrastructure & Backend de Base ✅
|
||||||
- [x] Installation Docker, Nginx (NPM), Pare-feu, Gitea/GitHub
|
- [x] Installation Docker, Pare-feu
|
||||||
- [x] Serveur Local Ollama (Qwen 3B) + FastHTML (Adapté aux processeurs limités type AMD Phenom)
|
- [x] Serveur Local Ollama + FastHTML
|
||||||
- [x] Routeur Multi-IA (OpenRouter, Gemini, Local) avec système de cascade et directives d'aiguillage strictes
|
- [x] Routeur Multi-IA (OpenRouter, Gemini, Local) avec système de cascade
|
||||||
- [x] Continuité de service : IA de secours automatique
|
- [x] Continuité de service : IA de secours automatique
|
||||||
|
|
||||||
### Phase 3 : Refonte UI & Expérience Utilisateur ✅
|
### Phase 3 : Refonte UI & Expérience Utilisateur ✅
|
||||||
- [x] Thème "Minecraft-Tech" (Inspiré serveurs/redstone) compatible Mobile (Responsive)
|
- [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] Historique (Sidebar) avec Renommage, Épinglage, Suppression et Navigation isolée
|
||||||
- [x] Zone de saisie intelligente (Textarea auto-adaptatif, Drag & Drop avec pills/miniatures, Collage multi-fichiers jusqu'à 10)
|
- [x] Zone de saisie intelligente (Drag & Drop, multi-fichiers)
|
||||||
- [x] Export modulaire et propre (PDF, DOC, TXT, JSON, ZIP)
|
- [x] Export modulaire (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] Architecture modulaire propre (Dossier `modules/`)
|
- [x] Architecture modulaire propre (Dossier `modules/`)
|
||||||
|
|
||||||
### Phase 4 : Gestion des Utilisateurs & Sécurité Légale
|
### 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.
|
- [ ] 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).
|
- [ ] Système de connexion sécurisé avec configuration du premier lancement.
|
||||||
- [x] Système de cryptage de grade militaire (Fernet) et de Hashing (Bcrypt) mis en place (Module `auth_manager.py`).
|
- [x] Système de cryptage avancé (Fernet) et de Hashing (Bcrypt) mis en place.
|
||||||
- [X] Sécurité Légère : Fail2Ban, protection Bruteforce et DDoS. **Blocage total des accès VPN**.
|
- [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.
|
- [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.
|
- [ ] Multilinguisme : Adaptation automatique de la langue du site via IP.
|
||||||
|
|
||||||
### Phase 5 : Sécurité Financière & Facturation Exacte 💰
|
### Phase 5 : Sécurité Financière & Facturation 💰
|
||||||
<!-- MAJ 18/08/2026 : Masquage de la formule comptable exacte pour confidentialité -->
|
- [x] Pré-calcul local du nombre de tokens (via `tiktoken`) pour estimer le coût avant envoi.
|
||||||
- [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.
|
||||||
- [ ] Interface UI : Affichage du Pop-Up de validation du coût pour l'utilisateur.
|
- [ ] Cryptage absolu des données sensibles bancaires.
|
||||||
- [ ] Cryptage absolu de toutes les données sensibles et bancaires.
|
- [ ] Module de conversion des devises en temps réel.
|
||||||
- [ ] Module de conversion des devises en temps réel (Taux du jour) pour un affichage transparent.
|
- [x] **Gestionnaire Financier :** Majoration automatique appliquée selon les statuts pour générer la facturation finale.
|
||||||
- [ ] **Utilisateurs Privilégiés (Zéro Marge) :** Xavier, Céline, Anaëlle, Renan et Audric. Autorisation de virements manuels pour la cagnotte.
|
- [ ] Export comptable Excel (TCD) avec archivage PDF automatisé (Admin uniquement).
|
||||||
- [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 6 : Nouvelles Capacités IA (Spécialisations & Modèles) 🤖
|
### 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 |
|
| Domaine de tâche | Moteur | 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 |
|
| **Orchestration & Tri** | Local (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 |
|
| **Bureautique & Code** | OpenRouter API | 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 |
|
| **Images HD / Fichiers** | Google API | 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) |
|
| **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
|
### Phase 7 & 8 : Maintenance & Déploiement
|
||||||
- [ ] Script de surveillance de l'espace disque du serveur (Beszel / Psutil) réservé à l'Admin.
|
- [ ] Création d'un Wiki d'installation détaillé multilingue.
|
||||||
- [x] Configuration du Webhook et script Bash de déploiement automatique ciblant la stack `AETHAS38_MULTI_IA` via Gitea.
|
- [x] Fichiers `docker-compose.yml` et `Dockerfile` préparés pour le déploiement conteneurisé.
|
||||||
- [ ] 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)*
|
|
||||||
@@ -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"""
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<h2 style="color: {'red' if niveau == 'CRITICAL' else 'orange'};">Alerte Serveur - Aethas38</h2>
|
||||||
|
<p><strong>Niveau :</strong> {niveau}</p>
|
||||||
|
<p><strong>Module/Source :</strong> {source}</p>
|
||||||
|
<p><strong>Détail de l'erreur :</strong></p>
|
||||||
|
<div style="background-color: #f4f4f4; padding: 10px; border-left: 4px solid red; font-family: monospace;">
|
||||||
|
{message_erreur}
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<p><em>Notification automatique de l'Orchestrateur (Phase Debug)</em></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
|
||||||
|
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"].
|
||||||
+24
-8
@@ -1,15 +1,31 @@
|
|||||||
# modules/logger.py
|
|
||||||
import datetime
|
|
||||||
import os
|
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"
|
LOG_FILE = "aethas_logs.txt"
|
||||||
|
|
||||||
def log_event(niveau, fournisseur, message):
|
def log_event(niveau, source, message):
|
||||||
"""Enregistre un événement ou une erreur dans le fichier de log."""
|
"""
|
||||||
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
Enregistre un événement dans le fichier de log local.
|
||||||
log_entry = f"[{timestamp}] [{niveau.upper()}] [{fournisseur.upper()}] {message}\n"
|
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:
|
try:
|
||||||
with open(LOG_FILE, "a", encoding="utf-8") as f:
|
with open(LOG_FILE, "a", encoding="utf-8") as f:
|
||||||
f.write(log_entry)
|
f.write(log_line)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Erreur d'écriture des logs : {e}")
|
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}")
|
||||||
Reference in new issue
Block a user