test session
Browse files- LesChatsDeSeatech.py +21 -0
- templates/index.html +36 -5
LesChatsDeSeatech.py
CHANGED
|
@@ -140,11 +140,17 @@ def handle_role_selection(session_id, selected_role=None):
|
|
| 140 |
|
| 141 |
# Si un rôle est sélectionné, l'enregistrer dans la session
|
| 142 |
if selected_role and selected_role in profile_mapping:
|
|
|
|
|
|
|
|
|
|
| 143 |
if 'user_profile' not in session:
|
| 144 |
session['user_profile'] = {}
|
| 145 |
session['user_profile']['role'] = selected_role
|
| 146 |
session['user_profile']['confirmed'] = True
|
| 147 |
|
|
|
|
|
|
|
|
|
|
| 148 |
# Message de bienvenue personnalisé selon le rôle
|
| 149 |
role_config = profile_mapping[selected_role]
|
| 150 |
welcome_message = f"""
|
|
@@ -159,6 +165,7 @@ def handle_role_selection(session_id, selected_role=None):
|
|
| 159 |
"is_system_message": True
|
| 160 |
})
|
| 161 |
|
|
|
|
| 162 |
return selected_role
|
| 163 |
|
| 164 |
return None
|
|
@@ -771,6 +778,10 @@ search_index, use_faiss = setup_search_index(chunk_embeddings)
|
|
| 771 |
# ===== APPLICATION FLASK =====
|
| 772 |
app = Flask(__name__, static_folder="static", template_folder="templates")
|
| 773 |
app.secret_key = 'seatech_chat_secret_key'
|
|
|
|
|
|
|
|
|
|
|
|
|
| 774 |
conversation_history_global = {}
|
| 775 |
# ajout Daly
|
| 776 |
|
|
@@ -783,8 +794,11 @@ vosk_model = vosk.Model("models/vosk-model-small-fr-0.22")
|
|
| 783 |
@app.route("/", methods=["GET", "POST"])
|
| 784 |
def index():
|
| 785 |
"""Page d'accueil du chatbot avec gestion de la sélection de rôle."""
|
|
|
|
|
|
|
| 786 |
if 'session_id' not in session:
|
| 787 |
session['session_id'] = str(uuid.uuid4())
|
|
|
|
| 788 |
session_id = session['session_id']
|
| 789 |
|
| 790 |
if session_id not in conversation_history_global:
|
|
@@ -856,6 +870,7 @@ def index():
|
|
| 856 |
@app.route("/api/ask", methods=["POST"])
|
| 857 |
def api_ask():
|
| 858 |
"""Endpoint API pour la recherche avec gestion de rôle."""
|
|
|
|
| 859 |
start_time = time.time()
|
| 860 |
try:
|
| 861 |
data = request.get_json()
|
|
@@ -875,6 +890,7 @@ def api_ask():
|
|
| 875 |
# Gestion de la session
|
| 876 |
if 'session_id' not in session:
|
| 877 |
session['session_id'] = str(uuid.uuid4())
|
|
|
|
| 878 |
session_id = session['session_id']
|
| 879 |
if session_id not in conversation_history_global:
|
| 880 |
conversation_history_global[session_id] = []
|
|
@@ -882,6 +898,7 @@ def api_ask():
|
|
| 882 |
# Gérer la sélection de rôle
|
| 883 |
if role_selection:
|
| 884 |
handle_role_selection(session_id, role_selection)
|
|
|
|
| 885 |
return jsonify({
|
| 886 |
"response": f"<p>Rôle <strong>{role_selection}</strong> sélectionné avec succès ! Vous pouvez maintenant poser vos questions.</p>",
|
| 887 |
"role_confirmed": True,
|
|
@@ -978,14 +995,18 @@ def api_role_info():
|
|
| 978 |
@app.route("/api/reset-role", methods=["POST"])
|
| 979 |
def api_reset_role():
|
| 980 |
"""Permet de réinitialiser le rôle sélectionné."""
|
|
|
|
|
|
|
| 981 |
if 'user_profile' in session:
|
| 982 |
session.pop('user_profile')
|
|
|
|
| 983 |
|
| 984 |
if 'session_id' in session:
|
| 985 |
session_id = session['session_id']
|
| 986 |
if session_id in conversation_history_global:
|
| 987 |
conversation_history_global[session_id] = []
|
| 988 |
|
|
|
|
| 989 |
return jsonify({
|
| 990 |
"response": "<p>Rôle réinitialisé. Veuillez sélectionner votre nouveau profil.</p>",
|
| 991 |
"role_confirmed": False,
|
|
|
|
| 140 |
|
| 141 |
# Si un rôle est sélectionné, l'enregistrer dans la session
|
| 142 |
if selected_role and selected_role in profile_mapping:
|
| 143 |
+
# Marquer la session comme permanente pour la persister
|
| 144 |
+
session.permanent = True
|
| 145 |
+
|
| 146 |
if 'user_profile' not in session:
|
| 147 |
session['user_profile'] = {}
|
| 148 |
session['user_profile']['role'] = selected_role
|
| 149 |
session['user_profile']['confirmed'] = True
|
| 150 |
|
| 151 |
+
# Force Flask à sauvegarder la session
|
| 152 |
+
session.modified = True
|
| 153 |
+
|
| 154 |
# Message de bienvenue personnalisé selon le rôle
|
| 155 |
role_config = profile_mapping[selected_role]
|
| 156 |
welcome_message = f"""
|
|
|
|
| 165 |
"is_system_message": True
|
| 166 |
})
|
| 167 |
|
| 168 |
+
logger.info(f"Rôle '{selected_role}' confirmé pour la session {session_id}")
|
| 169 |
return selected_role
|
| 170 |
|
| 171 |
return None
|
|
|
|
| 778 |
# ===== APPLICATION FLASK =====
|
| 779 |
app = Flask(__name__, static_folder="static", template_folder="templates")
|
| 780 |
app.secret_key = 'seatech_chat_secret_key'
|
| 781 |
+
app.config['SESSION_COOKIE_SECURE'] = False # Important pour développement/HTTP
|
| 782 |
+
app.config['SESSION_COOKIE_HTTPONLY'] = True
|
| 783 |
+
app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'
|
| 784 |
+
app.config['PERMANENT_SESSION_LIFETIME'] = 3600 # 1 heure
|
| 785 |
conversation_history_global = {}
|
| 786 |
# ajout Daly
|
| 787 |
|
|
|
|
| 794 |
@app.route("/", methods=["GET", "POST"])
|
| 795 |
def index():
|
| 796 |
"""Page d'accueil du chatbot avec gestion de la sélection de rôle."""
|
| 797 |
+
session.permanent = True
|
| 798 |
+
|
| 799 |
if 'session_id' not in session:
|
| 800 |
session['session_id'] = str(uuid.uuid4())
|
| 801 |
+
session.modified = True
|
| 802 |
session_id = session['session_id']
|
| 803 |
|
| 804 |
if session_id not in conversation_history_global:
|
|
|
|
| 870 |
@app.route("/api/ask", methods=["POST"])
|
| 871 |
def api_ask():
|
| 872 |
"""Endpoint API pour la recherche avec gestion de rôle."""
|
| 873 |
+
session.permanent = True
|
| 874 |
start_time = time.time()
|
| 875 |
try:
|
| 876 |
data = request.get_json()
|
|
|
|
| 890 |
# Gestion de la session
|
| 891 |
if 'session_id' not in session:
|
| 892 |
session['session_id'] = str(uuid.uuid4())
|
| 893 |
+
session.modified = True
|
| 894 |
session_id = session['session_id']
|
| 895 |
if session_id not in conversation_history_global:
|
| 896 |
conversation_history_global[session_id] = []
|
|
|
|
| 898 |
# Gérer la sélection de rôle
|
| 899 |
if role_selection:
|
| 900 |
handle_role_selection(session_id, role_selection)
|
| 901 |
+
logger.info(f"Rôle {role_selection} sélectionné via API pour session {session_id}")
|
| 902 |
return jsonify({
|
| 903 |
"response": f"<p>Rôle <strong>{role_selection}</strong> sélectionné avec succès ! Vous pouvez maintenant poser vos questions.</p>",
|
| 904 |
"role_confirmed": True,
|
|
|
|
| 995 |
@app.route("/api/reset-role", methods=["POST"])
|
| 996 |
def api_reset_role():
|
| 997 |
"""Permet de réinitialiser le rôle sélectionné."""
|
| 998 |
+
session.permanent = True
|
| 999 |
+
|
| 1000 |
if 'user_profile' in session:
|
| 1001 |
session.pop('user_profile')
|
| 1002 |
+
session.modified = True
|
| 1003 |
|
| 1004 |
if 'session_id' in session:
|
| 1005 |
session_id = session['session_id']
|
| 1006 |
if session_id in conversation_history_global:
|
| 1007 |
conversation_history_global[session_id] = []
|
| 1008 |
|
| 1009 |
+
logger.info(f"Rôle réinitialisé pour la session {session.get('session_id')}")
|
| 1010 |
return jsonify({
|
| 1011 |
"response": "<p>Rôle réinitialisé. Veuillez sélectionner votre nouveau profil.</p>",
|
| 1012 |
"role_confirmed": False,
|
templates/index.html
CHANGED
|
@@ -380,25 +380,50 @@
|
|
| 380 |
if (confirmRoleBtn) {
|
| 381 |
confirmRoleBtn.addEventListener('click', function () {
|
| 382 |
if (selectedRole) {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 383 |
fetch('/api/ask', {
|
| 384 |
method: 'POST',
|
| 385 |
headers: { 'Content-Type': 'application/json' },
|
| 386 |
body: JSON.stringify({ role_selection: selectedRole }),
|
| 387 |
credentials: 'same-origin'
|
| 388 |
})
|
| 389 |
-
.then(response =>
|
|
|
|
|
|
|
|
|
|
| 390 |
.then(data => {
|
|
|
|
| 391 |
if (data.status === 'role_selected') {
|
| 392 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 393 |
}
|
| 394 |
})
|
| 395 |
-
.catch(error =>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 396 |
}
|
| 397 |
});
|
| 398 |
}
|
| 399 |
|
| 400 |
if (resetRoleBtn) {
|
| 401 |
resetRoleBtn.addEventListener('click', function () {
|
|
|
|
|
|
|
|
|
|
| 402 |
fetch('/api/reset-role', {
|
| 403 |
method: 'POST',
|
| 404 |
headers: { 'Content-Type': 'application/json' },
|
|
@@ -406,11 +431,17 @@
|
|
| 406 |
})
|
| 407 |
.then(response => response.json())
|
| 408 |
.then(data => {
|
|
|
|
| 409 |
if (data.status === 'role_reset') {
|
| 410 |
-
|
|
|
|
|
|
|
| 411 |
}
|
| 412 |
})
|
| 413 |
-
.catch(error =>
|
|
|
|
|
|
|
|
|
|
| 414 |
});
|
| 415 |
}
|
| 416 |
|
|
|
|
| 380 |
if (confirmRoleBtn) {
|
| 381 |
confirmRoleBtn.addEventListener('click', function () {
|
| 382 |
if (selectedRole) {
|
| 383 |
+
console.log('Envoi de la sélection de rôle:', selectedRole);
|
| 384 |
+
confirmRoleBtn.disabled = true;
|
| 385 |
+
confirmRoleBtn.textContent = 'En cours...';
|
| 386 |
+
|
| 387 |
fetch('/api/ask', {
|
| 388 |
method: 'POST',
|
| 389 |
headers: { 'Content-Type': 'application/json' },
|
| 390 |
body: JSON.stringify({ role_selection: selectedRole }),
|
| 391 |
credentials: 'same-origin'
|
| 392 |
})
|
| 393 |
+
.then(response => {
|
| 394 |
+
console.log('Réponse status:', response.status);
|
| 395 |
+
return response.json();
|
| 396 |
+
})
|
| 397 |
.then(data => {
|
| 398 |
+
console.log('Données reçues:', data);
|
| 399 |
if (data.status === 'role_selected') {
|
| 400 |
+
console.log('Rôle sélectionné avec succès, rechargement...');
|
| 401 |
+
// Attendre 500ms avant de recharger pour assurer la sauvegarde de la session
|
| 402 |
+
setTimeout(() => {
|
| 403 |
+
window.location.href = window.location.origin + '/';
|
| 404 |
+
}, 500);
|
| 405 |
+
} else {
|
| 406 |
+
console.error('Erreur: statut inattendu', data);
|
| 407 |
+
alert('Erreur lors de la sélection du rôle. Veuillez réessayer.');
|
| 408 |
+
confirmRoleBtn.disabled = false;
|
| 409 |
+
confirmRoleBtn.textContent = '✓ Confirmer mon profil';
|
| 410 |
}
|
| 411 |
})
|
| 412 |
+
.catch(error => {
|
| 413 |
+
console.error('Erreur lors de la sélection de rôle:', error);
|
| 414 |
+
alert('Erreur réseau: ' + error.message);
|
| 415 |
+
confirmRoleBtn.disabled = false;
|
| 416 |
+
confirmRoleBtn.textContent = '✓ Confirmer mon profil';
|
| 417 |
+
});
|
| 418 |
}
|
| 419 |
});
|
| 420 |
}
|
| 421 |
|
| 422 |
if (resetRoleBtn) {
|
| 423 |
resetRoleBtn.addEventListener('click', function () {
|
| 424 |
+
console.log('Réinitialisation du rôle...');
|
| 425 |
+
resetRoleBtn.disabled = true;
|
| 426 |
+
|
| 427 |
fetch('/api/reset-role', {
|
| 428 |
method: 'POST',
|
| 429 |
headers: { 'Content-Type': 'application/json' },
|
|
|
|
| 431 |
})
|
| 432 |
.then(response => response.json())
|
| 433 |
.then(data => {
|
| 434 |
+
console.log('Réponse réinitialisation:', data);
|
| 435 |
if (data.status === 'role_reset') {
|
| 436 |
+
setTimeout(() => {
|
| 437 |
+
window.location.href = window.location.origin + '/';
|
| 438 |
+
}, 500);
|
| 439 |
}
|
| 440 |
})
|
| 441 |
+
.catch(error => {
|
| 442 |
+
console.error('Erreur lors de la réinitialisation:', error);
|
| 443 |
+
resetRoleBtn.disabled = false;
|
| 444 |
+
});
|
| 445 |
});
|
| 446 |
}
|
| 447 |
|