maj auto 1

This commit is contained in:
xavier committed 2026-08-18 15:04:53 +02:00
1 parent 37ee5c6234
commit b874019def
4 files changed
+93 -12

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
FROM python:3.13-slim
WORKDIR /app
# Installation des dépendances système nécessaires pour certaines librairies Python
RUN apt-get update && apt-get install -y gcc default-libmysqlclient-dev && rm -rf /var/lib/apt/lists/*
# Copie des requirements et installation
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copie du reste de l'application
COPY . .
# Exposition du port
EXPOSE 5001
# Lancement du serveur Uvicorn (FastHTML)
CMD ["python", "main.py"]
+7 -12
View File
@@ -1,7 +1,8 @@
# Aethas38 - Multi-IA Orchestrateur (Minecraft-Tech Edition) # Aethas38 - Multi-IA Orchestrateur (Minecraft-Tech Edition)
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.
**Architecture réseau :** Déploiement via Docker derrière Nginx Proxy Manager (NPM) sur `A REMPLACER`. <!-- MAJ 18/08/2026 : URL de production masquée pour raisons de cybersécurité (Information Disclosure) -->
**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) rédigée par Xavier Fernandez (Aethas38).
@@ -27,42 +28,36 @@ Ce projet est distribué sous une licence "Source Available" propriétaire (EULA
- [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
<!-- MAJ 18/08/2026 14h30 : Mise à jour de l'état d'avancement des modules de cryptage et sécurité --> <!-- MAJ 18/08/2026 : Intégration du Middleware de sécurité dans main.py et du module billing_manager -->
- [ ] 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 (création PDF, DOCX, etc.).
- [ ] 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" (Admin global). - [ ] 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" (Admin global).
- [x] Système de cryptage de grade militaire (Fernet) et de Hashing (Bcrypt) mis en place (Module `auth_manager.py`). <!-- NOUVEAU -->
- [X] Sécurité Légère : Fail2Ban, protection Bruteforce et DDoS. **Blocage total des accès VPN**. - [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. - [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 la géolocalisation de l'IP.
### Phase 5 : Sécurité Financière & Facturation Exacte 💰 ### Phase 5 : Sécurité Financière & Facturation Exacte 💰
<!-- MAJ 18/08/2026 14h30 : Ajout de la contrainte de pré-calcul local des tokens (tiktoken) et validation UI --> - [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.
- [ ] Pré-calcul local du nombre de tokens (via `tiktoken`) pour estimer le coût avant envoi. Bloquage et validation utilisateur requise si le coût est > 0. <!-- NOUVEAU --> - [ ] Interface UI : Affichage du Pop-Up de validation du coût pour l'utilisateur.
- [ ] Cryptage absolu de toutes les données sensibles et bancaires. - [ ] 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. - [ ] 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. - [ ] **Utilisateurs Privilégiés (Zéro Marge) :** Xavier, Céline, Anaëlle, Renan et Audric. Autorisation de virements manuels pour la cagnotte.
- [ ] **Marge Commerciale :** Majoration automatique via la formule `Prix_Facture_HT = Cout_API_OpenRouter_HT / 0.85` (soit 15% de marge) pour les comptes externes, prenant en compte le statut auto-entrepreneur (TVA). - [x] **Marge Commerciale :** Majoration automatique via la formule `Prix_Facture_HT = Cout_API_OpenRouter_HT / 0.85` (soit 15% de marge) implémentée dans le gestionnaire financier.
- [ ] Export comptable Excel (TCD) par utilisateur via Pandas/Openpyxl et archivage PDF automatisé. - [ ] 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.* *Note : L'infrastructure bascule sur OpenRouter pour palier aux décommissionnements constants des autres fournisseurs.*
<!-- MAJ 18/08/2026 14h30 : Ajout de la ligne pour la gestion Multimédia (Image/Video) -->
| Domaine de tâche | Modèle / Moteur | Fournisseur / Hébergement | Rôle principal | | 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 | | **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 | | **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 | | **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) | <!-- NOUVEAU -->
### Phase 7 & 8 : Maintenance & Déploiement ### Phase 7 & 8 : Maintenance & Déploiement
<!-- MAJ 18/08/2026 14h30 : Précision sur les Webhooks Gitea et le déploiement NPM -->
- [ ] Script de surveillance de l'espace disque du serveur (Beszel / Psutil) réservé à l'Admin. - [ ] 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 (Git Pull + Docker Compose Rebuild) via Gitea. <!-- NOUVEAU -->
- [ ] Déploiement du conteneur Aethas38 derrière Nginx Proxy Manager (NPM). <!-- NOUVEAU -->
- [ ] Sauvegarde automatique : Compression du site toutes les 6 heures vers GDrive (`25-BACKUP SITE`), 4 versions conservées. - [ ] Sauvegarde automatique : Compression du site toutes les 6 heures vers GDrive (`25-BACKUP SITE`), 4 versions conservées.
- [ ] Hébergement sur Gitea/Github des versions "Install Initial" ou "Update" pour Docker. Licence identique sur les deux plateformes. - [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. - [ ] Création d'un Wiki détaillé multilingue pour l'installation personnelle.
## 📷 Vidéosurveillance & Détection Intelligente ## 📷 Vidéosurveillance & Détection Intelligente
+15
View File
@@ -0,0 +1,15 @@
version: '3.8'
services:
aethas38_app:
container_name: aethas38_app
build: .
restart: unless-stopped
ports:
# Port exposé pour Nginx Proxy Manager
- "5001:5001"
volumes:
# Montage local pour conserver la BDD, les logs et les clés cryptées si le conteneur redémarre
- .:/app
environment:
- TZ=Europe/Paris
+52
View File
@@ -0,0 +1,52 @@
import tiktoken
from modules.logger import log_event
# Tarification indicative par token (À synchroniser avec OpenRouter)
TARIFS_OPENROUTER = {
"meta-llama/llama-3.1-8b-instruct:free": 0.0,
"qwen/qwen-2.5-coder-32b-instruct:free": 0.0,
"google/gemini-2.5-pro": 0.000005 # Exemple de modèle payant
}
def compter_tokens(texte, modele="cl100k_base"):
"""Compte le nombre de tokens en local pour éviter les requêtes API inutiles."""
try:
enc = tiktoken.get_encoding(modele)
return len(enc.encode(texte))
except Exception as e:
log_event("ERROR", "BILLING", f"Erreur lors du comptage des tokens : {e}")
return 0
def estimer_cout_facture(prompt, modele_id):
"""
Calcule le coût de la requête.
Applique la marge stricte de 15% pour générer le Prix Facture HT.
"""
tokens = compter_tokens(prompt)
cout_brut_api = tokens * TARIFS_OPENROUTER.get(modele_id, 0.0)
if cout_brut_api == 0.0:
return 0.0
# Application stricte de votre formule comptable
prix_facture_ht = cout_brut_api / 0.85
return round(prix_facture_ht, 6)
def verifier_et_valider_budget(prompt, modele_id, utilisateur_vip=False):
"""
Fonction appelée avant chaque requête par le Chat Handler.
Si le coût > 0 et que l'utilisateur n'a pas explicitement validé, on stoppe tout.
"""
cout_estime = estimer_cout_facture(prompt, modele_id)
# Les VIP ne paient pas de marge, on affiche juste le coût brut pour information
if utilisateur_vip:
log_event("INFO", "BILLING", f"Utilisateur VIP. Coût brut estimé de la requête : {cout_estime * 0.85} $")
return True, 0.0
if cout_estime > 0.0:
# Lève une exception spécifique que l'interface FastHTML devra attraper pour afficher le pop-up
raise Exception(f"VALIDATION_PAIEMENT_REQUISE|{cout_estime}")
return True, cout_estime