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

+37 -4
View File
@@ -5,6 +5,8 @@ import uuid
import time
import re
import psutil
import threading
import requests
from fasthtml.common import *
from modules.database import load_history, save_history
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.rag_manager import rechercher_contexte_rag, auto_apprendre_rag
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):
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:
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:
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:
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", "")
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": "ai",
@@ -173,11 +203,14 @@ async def handle_chat_request(request, session):
"modele": modele,
"couleur": couleur,
"execution_time": execution_time,
"trace": trace_route
"trace": trace_route,
"prompt_associe": prompt,
"thematique": thematique_rag,
"msg_id": id_message_unique
})
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:
log_event("CRITICAL", "SYSTEM", f"Erreur : {e}")