Amélioration fonction RAG auto incrémentation
Build and Push Docker Image / build-and-push (push) Successful in 35s

This commit is contained in:
xavier committed 2026-08-28 20:13:17 +02:00
1 parent b88d693d69
commit 3b2cf51a24
2 files changed
+45 -4

No files matched your search

+8
View File
@@ -16,6 +16,7 @@ from modules.security import verifier_et_bloquer_vpn, journaliser_ip
from modules.auth_manager import IDENTIFIANTS_ADMIN, verifier_mot_de_passe from modules.auth_manager import IDENTIFIANTS_ADMIN, verifier_mot_de_passe
from modules.logger import log_event from modules.logger import log_event
from modules.billing_manager import charger_soldes, sauvegarder_soldes from modules.billing_manager import charger_soldes, sauvegarder_soldes
from modules.rag_manager import auto_apprendre_rag
# Lancement du module d'auto-mise à jour en arrière-plan # Lancement du module d'auto-mise à jour en arrière-plan
import modules.model_updater import modules.model_updater
@@ -144,5 +145,12 @@ def post(cid: str):
if cid_str in h: del h[cid_str]; save_history(h) if cid_str in h: del h[cid_str]; save_history(h)
return render_sidebar() return render_sidebar()
# --- NOUVELLE ROUTE POUR LE RAG (BOUTON MANUEL) ---
@rt('/api/forcer_rag')
def post(prompt: str, reponse: str, theme: str):
"""Intercepte la demande manuelle, lance l'indexation et renvoie un badge vert."""
auto_apprendre_rag(prompt, reponse, theme)
return Span("✅ Indexé", cls="msg-action-btn", style="background-color: #4caf50; color: white; border: none; cursor: default;")
if __name__ == '__main__': if __name__ == '__main__':
serve(port=5001) serve(port=5001)
+37 -4
View File
@@ -5,6 +5,8 @@ import uuid
import time import time
import re import re
import psutil import psutil
import threading
import requests
from fasthtml.common import * from fasthtml.common import *
from modules.database import load_history, save_history from modules.database import load_history, save_history
from modules.scraper import rechercher_sur_google, extraire_contenu_urls from modules.scraper import rechercher_sur_google, extraire_contenu_urls
@@ -16,7 +18,25 @@ from modules.logger import log_event
from modules.billing_manager import verifier_et_valider_budget, obtenir_solde from modules.billing_manager import verifier_et_valider_budget, obtenir_solde
from modules.rag_manager import rechercher_contexte_rag, auto_apprendre_rag from modules.rag_manager import rechercher_contexte_rag, auto_apprendre_rag
from modules.moderator import analyser_intention_illicite, appliquer_sanction_et_archiver from modules.moderator import analyser_intention_illicite, appliquer_sanction_et_archiver
from modules.ai_media import router_media # <--- IMPORT DU NOUVEAU MODULE from modules.ai_media import router_media
def evaluer_pertinence_pour_rag(prompt_utilisateur: str, reponse_ia: str) -> bool:
"""Juge si la réponse est suffisamment technique/factuelle pour être indexée."""
prompt_superviseur = f"""Tu es un bibliothécaire strict. Évalue si cet échange mérite d'être conservé.
Règle 1 : Si la réponse contient des infos factuelles, du code, des règles ou des configurations techniques, réponds UNIQUEMENT "OUI".
Règle 2 : Si c'est conversationnel, vague, ou une erreur, réponds UNIQUEMENT "NON".
Question : {prompt_utilisateur}
Réponse : {reponse_ia[:800]}
"""
try:
reponse = requests.post("http://172.19.0.1:11434/api/generate", json={
"model": "llama3.1", # Modèle rapide local via Ollama
"prompt": prompt_superviseur,
"stream": False
}, timeout=10).json()
return "OUI" in reponse.get("response", "").strip().upper()
except Exception:
return False
def check_and_update_resource_quota(utilisateur_nom, role_utilisateur): def check_and_update_resource_quota(utilisateur_nom, role_utilisateur):
quota_file = "/DATA/AppData/MULTI-IA-AETHAS38/Utilisateurs/quotas_ressources.json" quota_file = "/DATA/AppData/MULTI-IA-AETHAS38/Utilisateurs/quotas_ressources.json"
@@ -154,8 +174,16 @@ async def handle_chat_request(request, session):
if "openrouter" in fournisseur_nom.lower() and mode_payant: if "openrouter" in fournisseur_nom.lower() and mode_payant:
verifier_et_valider_budget(full_prompt, modele, utilisateur_nom=utilisateur_nom, rang_utilisateur=role_utilisateur, multi_ia=mode_multi_ia) verifier_et_valider_budget(full_prompt, modele, utilisateur_nom=utilisateur_nom, rang_utilisateur=role_utilisateur, multi_ia=mode_multi_ia)
# --- SUPERVISEUR IA EN ARRIÈRE-PLAN ---
if thematique_rag != "aucun" and reponse: if thematique_rag != "aucun" and reponse:
auto_apprendre_rag(prompt, reponse, thematique_rag) def superviseur_et_rag(p, r, t):
if evaluer_pertinence_pour_rag(p, r):
log_event("INFO", "SUPERVISEUR", f"Réponse validée. Indexation dans {t}")
auto_apprendre_rag(p, r, t)
else:
log_event("INFO", "SUPERVISEUR", "Échange ignoré pour le RAG (non pertinent).")
threading.Thread(target=superviseur_et_rag, args=(prompt, reponse, thematique_rag)).start()
if chat_id not in history: if chat_id not in history:
history[chat_id] = {"title": (prompt[:30] if prompt else "Discussion") + "...", "pinned": False, "timestamp": time.time(), "messages": []} history[chat_id] = {"title": (prompt[:30] if prompt else "Discussion") + "...", "pinned": False, "timestamp": time.time(), "messages": []}
@@ -164,6 +192,8 @@ async def handle_chat_request(request, session):
display_msg = prompt.replace("[SYSTÈME] RÈGLE ÉDUCATION NATIONALE : Agis comme un expert de l'Éducation Nationale française. Pédagogie stricte, respect du B.O.\n\n", "") display_msg = prompt.replace("[SYSTÈME] RÈGLE ÉDUCATION NATIONALE : Agis comme un expert de l'Éducation Nationale française. Pédagogie stricte, respect du B.O.\n\n", "")
if file_names: display_msg += f"\n\n📎 **Fichiers joints :** {', '.join(file_names)}" if file_names: display_msg += f"\n\n📎 **Fichiers joints :** {', '.join(file_names)}"
id_message_unique = str(uuid.uuid4())
history[chat_id]["messages"].append({"role": "user", "content": display_msg}) history[chat_id]["messages"].append({"role": "user", "content": display_msg})
history[chat_id]["messages"].append({ history[chat_id]["messages"].append({
"role": "ai", "role": "ai",
@@ -173,11 +203,14 @@ async def handle_chat_request(request, session):
"modele": modele, "modele": modele,
"couleur": couleur, "couleur": couleur,
"execution_time": execution_time, "execution_time": execution_time,
"trace": trace_route "trace": trace_route,
"prompt_associe": prompt,
"thematique": thematique_rag,
"msg_id": id_message_unique
}) })
save_history(history) save_history(history)
return render_user_msg(display_msg), render_ai_msg(reponse, intention, fournisseur_nom, modele, couleur, execution_time), Script("renderMarkdown();"), render_sidebar() return render_user_msg(display_msg), render_ai_msg(reponse, intention, fournisseur_nom, modele, couleur, execution_time, trace_route, prompt, thematique_rag, id_message_unique), Script("renderMarkdown();"), render_sidebar()
except Exception as e: except Exception as e:
log_event("CRITICAL", "SYSTEM", f"Erreur : {e}") log_event("CRITICAL", "SYSTEM", f"Erreur : {e}")