Public Access
Amélioration fonction RAG auto incrémentation
Build and Push Docker Image / build-and-push (push) Successful in 35s
Build and Push Docker Image / build-and-push (push) Successful in 35s
This commit is contained in:
1 parent
b88d693d69
commit
3b2cf51a24
2 files changed
+45
-4
No files matched your search
@@ -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.logger import log_event
|
||||
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
|
||||
import modules.model_updater
|
||||
@@ -144,5 +145,12 @@ def post(cid: str):
|
||||
if cid_str in h: del h[cid_str]; save_history(h)
|
||||
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__':
|
||||
serve(port=5001)
|
||||
+37
-4
@@ -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}")
|
||||
|
||||
Reference in new issue
Block a user