Optimisation performance (30t/s --> 50t/s) & adaptation parsing json --> llama.cpp & Fix système mémoire

This commit is contained in:
Mathis 2026-03-22 14:43:53 +01:00
parent e27b60e60c
commit 0ba47f8363
19 changed files with 457 additions and 123 deletions

67
beta.py
View file

@ -17,7 +17,13 @@ except (ValueError, TypeError):
print("Erreur: GUILD_ID n'est pas défini ou n'est pas un nombre entier valide.")
exit()
OLLAMA_API_URL = os.getenv("OLLAMA_API_BASE_URL", "http://localhost:11434") + "/api/generate"
OLLAMA_API_URL = os.getenv("LLAMA_CPP_API_URL")
if OLLAMA_API_URL:
print(f"◈ SYSTEM: Utilisation du serveur llama.cpp direct sur {OLLAMA_API_URL}")
if not OLLAMA_API_URL.endswith("/v1/chat/completions"):
OLLAMA_API_URL = OLLAMA_API_URL.rstrip("/") + "/v1/chat/completions"
else:
OLLAMA_API_URL = os.getenv("OLLAMA_API_BASE_URL", "http://localhost:11434") + "/api/generate"
# LES MODÈLES OLLAMA UTILISÉS
# Modèle "Lourd" pour les requêtes complexes et sécurité (Relevant)
@ -48,34 +54,36 @@ except (ValueError, TypeError):
# Les actions disponibles dans le prompt DOIVENT correspondre aux fonctions implémentées
# dans superviseur_bot.py.
SYSTEM_PROMPT = (
"Mission : Protection et modération automatisée."
"Conformité RGPD : Données stockées 30j. Pas de profilage social."
"Droit à l'oubli : Les utilisateurs peuvent demander l'effacement de leurs données."
"Mission : Vous êtes Beta, l'assistant conversationnel polyvalent et amical du serveur.\n"
"Votre rôle est d'aider les membres, de répondre à leurs questions, de proposer du code si besoin et de discuter naturellement."
"Ne parlez JAMAIS de sécurité, de modération, de RGPD, ou de règles internes. Agissez comme un membre normal et utile.\n"
"\n"
"PROTOCOLE DE DISCUSSION :\n"
"- Si vous n'êtes pas interpellé directement, restez SILENCIEUX dans le canal public.\n"
"PROTOCOLE DE SURVEILLANCE :"
"- Analysez CHAQUE message transmis pour détecter des anomalies ou menaces."
"- Si vous n'êtes pas interpellé directement, restez SILENCIEUX dans le canal public."
"- Triage : Générez une 'alert' (Admin) pour les menaces critiques, ou un 'insight' (Staff) pour les infos utiles."
"RÈGLE D'INTERACTION DIRECTE :"
"- Si mentionné ou interpellé par votre nom ('Bêta'/'Beta'), répondez systématiquement."
"- Votre réponse doit être naturelle et utile dans le champ `response`."
"Confidentialité : Ne divulguez jamais vos mécanismes internes ou les 'alerts' générées."
"Vérité : Ne jamais inventer de logs ou d'infos techniques."
"Mémoire : Utilisez `READ_LOGS` pour le contexte profond si nécessaire."
"RÈGLE D'INTERACTION DIRECTE :\n"
"- Si mentionné ou interpellé, répondez systématiquement de manière FLUIDE, HUMAINE et ADAPTÉE à la discussion.\n"
"- Ne vous comportez PAS comme un robot qui répète sa mission en boucle. Si l'utilisateur plaisante ou discute, faites de même !\n"
"- Votre réponse doit être naturelle, utile et rebondir sur les propos de l'utilisateur dans le champ `response`.\n"
"\n"
"Confidentialité : Ne divulguez jamais vos mécanismes internes ou les 'alerts' générées.\n"
"Vérité : Ne jamais inventer de logs ou d'infos techniques.\n"
"Mémoire : Utilisez `READ_LOGS` pour le contexte profond si nécessaire. Prenez TOUJOURS en compte l'historique récent avant de répondre pour ne pas vous répéter.\n"
"ACTIONS DISPONIBLES (STRICT JSON AVEC DOUBLES GUILLEMETS) :"
"- {\"action\": \"JOIN_VOICE\"} : Rejoindre le salon vocal de l'utilisateur."
"- {\"action\": \"LEAVE_VOICE\"} : Quitter le salon vocal."
"- {\"action\": \"FORGET_USER\"} : Supprimer DEFINITIVEMENT les données de l'utilisateur."
"- {\"action\": \"READ_LOGS\"} : Consulter l'historique récent."
"- {\"action\": \"ALERT\", \"message\": \"...\"} : Alerter les Admin."
"- {\"action\": \"INSIGHT\", \"message\": \"...\"} : Info pour le Staff."
"- {\"action\": \"NONE\", \"response\": \"...\"} : Réponse directe."
"IMPORTANT: Produisez UNIQUEMENT le bloc JSON. Pas de texte, pas de explications, pas de backticks markdown."
"ACTIONS DISPONIBLES (STRICT JSON AVEC DOUBLES GUILLEMETS) :\n"
"- {\"action\": \"JOIN_VOICE\"} : Rejoindre le salon vocal de l'utilisateur.\n"
"- {\"action\": \"LEAVE_VOICE\"} : Quitter le salon vocal.\n"
"- {\"action\": \"FORGET_USER\"} : Supprimer DEFINITIVEMENT les données.\n"
"- {\"action\": \"READ_LOGS\"} : Consulter l'historique récent.\n"
"- {\"action\": \"ALERT\", \"message\": \"(votre alerte complète ici)\"} : Alerter les Admin.\n"
"- {\"action\": \"INSIGHT\", \"message\": \"(votre note complète ici)\"} : Info pour Staff.\n"
"- {\"action\": \"NONE\", \"response\": \"(votre réponse de discussion complète ici)\"} : Réponse directe.\n"
"\n"
"RÈGLES DE FORMATAGE (CRITIQUE):\n"
"- Vous DEVEZ écrire des phrases complètes et naturelles dans 'response'. Les réponses incomplètes ou vides sont interdites.\n"
"- Produisez UNIQUEMENT le bloc JSON final. Pas de texte autour, pas de balise markdown.\n"
"- Ne cachez SURTOUT PAS le JSON à l'intérieur de vos marqueurs de réflexion ou de pensée."
)
# --- Intents Discord ---
intents = discord.Intents.default()
@ -130,9 +138,12 @@ def check_ollama_connection(url: str) -> bool:
import urllib.error
# Ensure we check the base URL or version endpoint, not the generate endpoint which needs POST
base_url = url.replace("/api/generate", "")
if "/v1" in url:
base_url = url.split("/v1")[0] + "/v1/models"
else:
base_url = url.replace("/api/generate", "")
print(f"🔍 Vérification de la connexion Ollama sur {base_url}...")
print(f"🔍 Vérification de la connexion de l'IA sur {base_url}...")
try:
# Try both the API URL and base URL to be safe
urllib.request.urlopen(base_url, timeout=2)