MAJ Phase 10 : Support KubeJS, bouton RAG UI et Modale d'upload admin
Build and Push Docker Image / build-and-push (push) Successful in 37s

This commit is contained in:
xavier committed 2026-08-29 07:38:55 +02:00
1 parent f17ef384f6
commit a2261ab8dd
3 files changed
+79 -5

No files matched your search

+40 -1
View File
@@ -3,6 +3,7 @@ from dotenv import load_dotenv
load_dotenv() # Force la lecture du fichier .env en local
import uuid
import json
import threading
from fasthtml.common import *
from starlette.staticfiles import StaticFiles
from starlette.responses import FileResponse, Response, HTMLResponse, RedirectResponse
@@ -10,13 +11,14 @@ from starlette.middleware.base import BaseHTTPMiddleware
from modules.theme import get_theme_hdrs
from modules.database import nettoyer_vieilles_discussions, HISTORY_FILE, load_history, save_history
from modules.ui_components import render_main_page, render_sidebar, render_login_page
from modules.ui_components import render_main_page, render_sidebar, render_login_page, render_rag_upload_modal
from modules.chat_handler import handle_chat_request
from modules.security import verifier_et_bloquer_vpn, journaliser_ip
from modules.auth_manager import IDENTIFIANTS_ADMIN, verifier_mot_de_passe
from modules.logger import log_event
from modules.billing_manager import charger_soldes, sauvegarder_soldes
from modules.rag_manager import auto_apprendre_rag
from modules.vector_rag import indexer_dossier_thematique
# Lancement du module d'auto-mise à jour en arrière-plan
import modules.model_updater
@@ -152,5 +154,42 @@ def post(prompt: str, reponse: str, theme: str):
auto_apprendre_rag(prompt, reponse, theme)
return Span("✅ Indexé", cls="msg-action-btn", style="background-color: #4caf50; color: white; border: none; cursor: default;")
# --- NOUVELLES ROUTES POUR L'UPLOAD MODAL DU RAG ---
@rt('/admin/rag_modal')
def get(session):
if session.get('user', '') != 'xavier':
return HTMLResponse("Accès refusé.")
return render_rag_upload_modal()
@rt('/api/upload_rag')
async def post(request, session):
if session.get('user', '') != 'xavier':
return Span("❌ Accès refusé", style="color: red;")
form = await request.form()
theme = form.get("theme")
fichiers = form.getlist("fichiers_rag")
if not theme or not fichiers:
return Span("❌ Thème ou fichiers manquants", style="color: red;")
dossier_cible = f"/DATA/AppData/MULTI-IA-AETHAS38/RAG/{theme}"
os.makedirs(dossier_cible, exist_ok=True)
fichiers_sauves = 0
for f in fichiers:
if f.filename:
chemin_fichier = os.path.join(dossier_cible, f.filename)
contenu = await f.read()
with open(chemin_fichier, "wb") as out:
out.write(contenu)
fichiers_sauves += 1
if fichiers_sauves > 0:
threading.Thread(target=indexer_dossier_thematique, args=(theme,)).start()
return Span(f"✅ {fichiers_sauves} fichier(s) sauvé(s). Indexation FAISS démarrée en arrière-plan !", style="color: #4caf50;")
else:
return Span("❌ Aucun fichier valide détecté.", style="color: red;")
if __name__ == '__main__':
serve(port=5001)