Daly26 commited on
Commit
78d1ed2
·
1 Parent(s): dc6b8fe

test session

Browse files
Files changed (2) hide show
  1. LesChatsDeSeatech.py +21 -0
  2. 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 => response.json())
 
 
 
390
  .then(data => {
 
391
  if (data.status === 'role_selected') {
392
- window.location.reload();
 
 
 
 
 
 
 
 
 
393
  }
394
  })
395
- .catch(error => console.error('Erreur lors de la sélection de rôle:', 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
- window.location.reload();
 
 
411
  }
412
  })
413
- .catch(error => console.error('Erreur lors de la réinitialisation:', 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