Aidahaouas commited on
Commit
edadca0
·
1 Parent(s): 346dab1

AuraDB instance dynamic activation added successfully !!

Browse files
Files changed (1) hide show
  1. app.py +79 -13
app.py CHANGED
@@ -231,6 +231,25 @@ def display_chat_history():
231
  with st.chat_message("assistant"):
232
  st.markdown(message["content"])
233
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  def main():
235
 
236
  initCarbon()
@@ -265,20 +284,59 @@ def main():
265
 
266
  st.markdown("")
267
 
268
-
269
- architecture = st.selectbox(
270
- "Sélectionnez une architecture",
 
 
 
 
 
 
 
 
 
 
271
  ["Basic", "Intermédiaire", "Avancée"],
272
- on_change=st.session_state.chat_history.clear
273
- )
274
-
275
- # Sauvegarder l'architecture dans st.session_state
276
- if architecture == "Intermédiaire":
277
- st.session_state["architecture"] = "B"
278
- elif architecture == "Avancée":
279
- st.session_state["architecture"] = "C"
280
  else:
281
- st.session_state["architecture"] = "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
 
283
  display_sidebar()
284
 
@@ -287,7 +345,15 @@ def main():
287
 
288
  query = st.chat_input("Posez votre question ici:")
289
  if query:
290
- process_query(query, st.session_state["architecture"])
 
 
 
 
 
 
 
 
291
 
292
 
293
  def calculate_tokens_cost():
 
231
  with st.chat_message("assistant"):
232
  st.markdown(message["content"])
233
 
234
+ def is_neo4j_aura_active(retries: int, wait_seconds: int):
235
+ """
236
+ Tente de se connecter à l'instance Neo4j. Si elle est en veille,
237
+ la fonction essaiera de se reconnecter jusqu'à ce que l'instance soit réveillée.
238
+
239
+ Args:
240
+ retries (int): Nombre de tentatives avant d'abandonner.
241
+ wait_seconds (int): Temps d'attente entre les tentatives.
242
+ """
243
+ for attempt in range(1, retries + 1):
244
+ try:
245
+ with neo4j_driver.session() as session:
246
+ session.run("RETURN 1") # Simple requête pour réveiller l’instance
247
+ return True
248
+ except Exception as e:
249
+ print(f"⚠️ Tentative {attempt}/{retries} : l'instance est en veille. Nouvel essai dans {wait_seconds}s...")
250
+ time.sleep(wait_seconds)
251
+ raise RuntimeError("❌ Impossible de réveiller l'instance Neo4j après plusieurs tentatives.")
252
+
253
  def main():
254
 
255
  initCarbon()
 
284
 
285
  st.markdown("")
286
 
287
+ # Init states
288
+ if "architecture" not in st.session_state:
289
+ st.session_state["architecture"] = None
290
+ if "confirmation_needed" not in st.session_state:
291
+ st.session_state["confirmation_needed"] = False
292
+ if "user_response" not in st.session_state:
293
+ st.session_state["user_response"] = None
294
+ if "selected_arch" not in st.session_state:
295
+ st.session_state["selected_arch"] = "Basic"
296
+
297
+ # Affichage du selectbox
298
+ selection = st.selectbox(
299
+ "Sélectionnez une architecture RAG :",
300
  ["Basic", "Intermédiaire", "Avancée"],
301
+ index=["Basic", "Intermédiaire", "Avancée"].index(st.session_state["selected_arch"]),
302
+ )
303
+
304
+ # Gestion de la logique
305
+ if selection == "Avancée":
306
+ st.session_state["confirmation_needed"] = True
307
+ st.session_state["architecture"] = None
308
+ st.session_state["selected_arch"] = "Avancée"
309
  else:
310
+ st.session_state["architecture"] = {
311
+ "Basic": "A",
312
+ "Intermédiaire": "B"
313
+ }[selection]
314
+ st.session_state["confirmation_needed"] = False
315
+ st.session_state["user_response"] = None
316
+ st.session_state["selected_arch"] = selection
317
+
318
+ # Popup confirmation si avancée
319
+ if st.session_state["confirmation_needed"]:
320
+ st.toast("⚠️ Attention, ce type de fonctionnement **Avancée** est plus précis, mais consomme plus de carbone. Souhaitez-vous réellement l'utiliser ?")
321
+ st.session_state["user_response"] = st.radio(
322
+ "Confirmez votre choix :",
323
+ options=["Oui", "Non"],
324
+ index=None,
325
+ key="confirm_radio"
326
+ )
327
+
328
+ # Ne rien faire tant que l'utilisateur n'a rien choisi
329
+ if st.session_state["user_response"] == "Oui":
330
+ st.session_state["architecture"] = "C"
331
+ st.toast("✅ Architecture 'Avancée' confirmée.")
332
+
333
+ elif st.session_state["user_response"] == "Non":
334
+ st.session_state["selected_arch"] = "Intermédiaire"
335
+ st.session_state["architecture"] = "B"
336
+ st.session_state["confirmation_needed"] = False
337
+ st.session_state["user_response"] = None
338
+ st.success("✅ Retour à l'architecture 'Intermédiaire'.")
339
+ st.rerun() # 🔁 Forcer le widget à se recréer
340
 
341
  display_sidebar()
342
 
 
345
 
346
  query = st.chat_input("Posez votre question ici:")
347
  if query:
348
+ if st.session_state.get("architecture") == "C":
349
+ #with st.spinner("⏳ Activation de l'instance Neo4j AuraDB en cours..."):
350
+ if is_neo4j_aura_active(10, 60): # 10 retries, 60 seconds each
351
+ st.toast("✅ Neo4j AuraDB est actif.")
352
+ process_query(query, "C")
353
+ else:
354
+ st.error("❌ Échec de l'activation de Neo4j. Veuillez réessayer plus tard.")
355
+ else:
356
+ process_query(query, st.session_state["architecture"])
357
 
358
 
359
  def calculate_tokens_cost():