Docfile commited on
Commit
c2fae2a
·
verified ·
1 Parent(s): 9b43085

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -26
app.py CHANGED
@@ -1,3 +1,4 @@
 
1
  from flask import Flask, render_template, request, jsonify, session
2
  from google import genai
3
  import os
@@ -6,6 +7,13 @@ import uuid
6
  import io
7
  import httpx
8
 
 
 
 
 
 
 
 
9
  app = Flask(__name__)
10
  app.secret_key = os.urandom(24) # Requis pour utiliser les sessions Flask
11
 
@@ -24,19 +32,24 @@ def load_pdf():
24
  global pdf_file
25
  if pdf_file is None:
26
  try:
27
- print(f"Téléchargement du PDF depuis {PDF_URL}...")
28
- pdf_content = httpx.get(PDF_URL).content
 
 
29
  pdf_io = io.BytesIO(pdf_content)
30
 
 
31
  # Télécharger le fichier via l'API Gemini
32
  pdf_file = client.files.upload(
33
  file=pdf_io,
34
  config=dict(mime_type='application/pdf')
35
  )
36
- print("PDF téléchargé et préparé avec succès!")
37
  except Exception as e:
38
- print(f"Erreur lors du téléchargement du PDF: {str(e)}")
39
  raise
 
 
40
  return pdf_file
41
 
42
  @app.route('/')
@@ -44,65 +57,83 @@ def index():
44
  # Créer un ID de session unique s'il n'existe pas déjà
45
  if 'session_id' not in session:
46
  session['session_id'] = str(uuid.uuid4())
47
-
 
 
 
48
  # Précharger le PDF au démarrage de l'application
49
  try:
50
  load_pdf()
51
  except Exception as e:
52
- return render_template('index.html', error=f"Erreur de chargement du PDF: {str(e)}")
 
 
53
 
 
54
  return render_template('index.html', pdf_url=PDF_URL)
55
 
56
  @app.route('/chat', methods=['POST'])
57
  def chat():
58
  data = request.json
59
  user_message = data.get('message', '')
60
-
 
61
  # Récupérer ou créer une session de chat pour cet utilisateur
62
  session_id = session.get('session_id')
63
  chat_session = get_or_create_chat_session(session_id)
64
-
 
65
  try:
66
  # S'assurer que le PDF est chargé
67
  pdf_document = load_pdf()
68
-
 
69
  # Construire le prompt pour Gemini avec référence au PDF
70
  prompt = f"En vous basant sur le contenu du PDF sur la langue fang, veuillez répondre à: {user_message}"
71
-
 
72
  # Envoyer le message à Gemini avec le PDF comme contexte et obtenir la réponse
73
- # Note: Pour utiliser le PDF dans chaque message, nous devons créer un nouveau message avec le PDF
74
  response = client.models.generate_content(
75
  model="gemini-2.0-flash",
76
  contents=[pdf_document, prompt]
77
  )
78
-
 
79
  # Ajouter cette paire question/réponse à l'historique local
80
  if not hasattr(app, 'chat_histories'):
81
  app.chat_histories = {}
82
-
 
83
  if session_id not in app.chat_histories:
84
  app.chat_histories[session_id] = []
85
-
 
 
86
  app.chat_histories[session_id].append({
87
  'role': 'user',
88
  'content': user_message,
89
- 'timestamp': datetime.now().strftime("%H:%M")
90
  })
91
-
 
92
  app.chat_histories[session_id].append({
93
  'role': 'model',
94
  'content': response.text,
95
- 'timestamp': datetime.now().strftime("%H:%M")
96
  })
97
-
 
98
  # Formater l'historique pour l'interface
99
  history = app.chat_histories[session_id]
100
-
 
101
  return jsonify({
102
  'response': response.text,
103
  'history': history
104
  })
105
  except Exception as e:
 
106
  return jsonify({'error': str(e)}), 500
107
 
108
  def get_or_create_chat_session(session_id):
@@ -110,13 +141,15 @@ def get_or_create_chat_session(session_id):
110
  Récupère une session de chat existante ou en crée une nouvelle.
111
  Dans une application réelle, vous pourriez stocker cela dans une base de données.
112
  """
113
- # Utilisation d'un dictionnaire global pour stocker les sessions (pour cet exemple)
114
- # Dans une application réelle, utilisez Redis ou une base de données
115
  if not hasattr(app, 'chat_sessions'):
116
  app.chat_sessions = {}
117
-
 
118
  if session_id not in app.chat_sessions:
 
119
  app.chat_sessions[session_id] = client.chats.create(model="gemini-2.0-flash")
 
 
120
 
121
  return app.chat_sessions[session_id]
122
 
@@ -124,16 +157,20 @@ def get_or_create_chat_session(session_id):
124
  def reset_chat():
125
  """Réinitialise la session de chat actuelle"""
126
  session_id = session.get('session_id')
127
-
 
128
  # Réinitialiser l'historique stocké
129
  if hasattr(app, 'chat_histories') and session_id in app.chat_histories:
130
  app.chat_histories[session_id] = []
131
-
 
132
  # Réinitialiser la session de chat
133
  if hasattr(app, 'chat_sessions') and session_id in app.chat_sessions:
134
  app.chat_sessions[session_id] = client.chats.create(model="gemini-2.0-flash")
135
-
 
136
  return jsonify({'status': 'success'})
137
 
138
  if __name__ == '__main__':
139
- app.run(debug=True)
 
 
1
+ import logging
2
  from flask import Flask, render_template, request, jsonify, session
3
  from google import genai
4
  import os
 
7
  import io
8
  import httpx
9
 
10
+ # Configuration du logging
11
+ logging.basicConfig(
12
+ level=logging.DEBUG,
13
+ format="%(asctime)s [%(levelname)s] %(message)s",
14
+ datefmt="%Y-%m-%d %H:%M:%S"
15
+ )
16
+
17
  app = Flask(__name__)
18
  app.secret_key = os.urandom(24) # Requis pour utiliser les sessions Flask
19
 
 
32
  global pdf_file
33
  if pdf_file is None:
34
  try:
35
+ logging.info(f"Début du téléchargement du PDF depuis {PDF_URL}")
36
+ response = httpx.get(PDF_URL)
37
+ response.raise_for_status()
38
+ pdf_content = response.content
39
  pdf_io = io.BytesIO(pdf_content)
40
 
41
+ logging.info("Téléchargement réussi. Envoi du PDF à l'API Gemini...")
42
  # Télécharger le fichier via l'API Gemini
43
  pdf_file = client.files.upload(
44
  file=pdf_io,
45
  config=dict(mime_type='application/pdf')
46
  )
47
+ logging.info("PDF téléchargé et préparé avec succès par Gemini!")
48
  except Exception as e:
49
+ logging.error(f"Erreur lors du téléchargement ou de la préparation du PDF: {str(e)}")
50
  raise
51
+ else:
52
+ logging.debug("PDF déjà chargé, utilisation du cache.")
53
  return pdf_file
54
 
55
  @app.route('/')
 
57
  # Créer un ID de session unique s'il n'existe pas déjà
58
  if 'session_id' not in session:
59
  session['session_id'] = str(uuid.uuid4())
60
+ logging.info(f"Nouvelle session créée avec l'ID : {session['session_id']}")
61
+ else:
62
+ logging.debug(f"Session existante détectée : {session['session_id']}")
63
+
64
  # Précharger le PDF au démarrage de l'application
65
  try:
66
  load_pdf()
67
  except Exception as e:
68
+ error_msg = f"Erreur de chargement du PDF: {str(e)}"
69
+ logging.error(error_msg)
70
+ return render_template('index.html', error=error_msg)
71
 
72
+ logging.info("Chargement de la page d'accueil réussi.")
73
  return render_template('index.html', pdf_url=PDF_URL)
74
 
75
  @app.route('/chat', methods=['POST'])
76
  def chat():
77
  data = request.json
78
  user_message = data.get('message', '')
79
+ logging.info(f"Message utilisateur reçu: {user_message}")
80
+
81
  # Récupérer ou créer une session de chat pour cet utilisateur
82
  session_id = session.get('session_id')
83
  chat_session = get_or_create_chat_session(session_id)
84
+ logging.debug(f"Session de chat pour l'ID {session_id}: {chat_session}")
85
+
86
  try:
87
  # S'assurer que le PDF est chargé
88
  pdf_document = load_pdf()
89
+ logging.debug("PDF document récupéré pour le traitement du chat.")
90
+
91
  # Construire le prompt pour Gemini avec référence au PDF
92
  prompt = f"En vous basant sur le contenu du PDF sur la langue fang, veuillez répondre à: {user_message}"
93
+ logging.info(f"Prompt construit pour Gemini: {prompt}")
94
+
95
  # Envoyer le message à Gemini avec le PDF comme contexte et obtenir la réponse
96
+ logging.info("Envoi du prompt à Gemini...")
97
  response = client.models.generate_content(
98
  model="gemini-2.0-flash",
99
  contents=[pdf_document, prompt]
100
  )
101
+ logging.info("Réponse reçue de Gemini.")
102
+
103
  # Ajouter cette paire question/réponse à l'historique local
104
  if not hasattr(app, 'chat_histories'):
105
  app.chat_histories = {}
106
+ logging.debug("Création de l'historique global des chats.")
107
+
108
  if session_id not in app.chat_histories:
109
  app.chat_histories[session_id] = []
110
+ logging.debug(f"Création d'un historique de chat pour la session {session_id}.")
111
+
112
+ timestamp = datetime.now().strftime("%H:%M")
113
  app.chat_histories[session_id].append({
114
  'role': 'user',
115
  'content': user_message,
116
+ 'timestamp': timestamp
117
  })
118
+ logging.debug("Message utilisateur ajouté à l'historique du chat.")
119
+
120
  app.chat_histories[session_id].append({
121
  'role': 'model',
122
  'content': response.text,
123
+ 'timestamp': timestamp
124
  })
125
+ logging.debug("Réponse du modèle ajoutée à l'historique du chat.")
126
+
127
  # Formater l'historique pour l'interface
128
  history = app.chat_histories[session_id]
129
+ logging.info("Historique du chat formaté et prêt à être envoyé.")
130
+
131
  return jsonify({
132
  'response': response.text,
133
  'history': history
134
  })
135
  except Exception as e:
136
+ logging.error(f"Erreur lors du traitement du chat: {str(e)}")
137
  return jsonify({'error': str(e)}), 500
138
 
139
  def get_or_create_chat_session(session_id):
 
141
  Récupère une session de chat existante ou en crée une nouvelle.
142
  Dans une application réelle, vous pourriez stocker cela dans une base de données.
143
  """
 
 
144
  if not hasattr(app, 'chat_sessions'):
145
  app.chat_sessions = {}
146
+ logging.debug("Création du dictionnaire global des sessions de chat.")
147
+
148
  if session_id not in app.chat_sessions:
149
+ logging.info(f"Aucune session de chat existante pour {session_id}. Création d'une nouvelle session.")
150
  app.chat_sessions[session_id] = client.chats.create(model="gemini-2.0-flash")
151
+ else:
152
+ logging.debug(f"Session de chat existante retrouvée pour {session_id}.")
153
 
154
  return app.chat_sessions[session_id]
155
 
 
157
  def reset_chat():
158
  """Réinitialise la session de chat actuelle"""
159
  session_id = session.get('session_id')
160
+ logging.info(f"Réinitialisation de la session de chat pour {session_id}")
161
+
162
  # Réinitialiser l'historique stocké
163
  if hasattr(app, 'chat_histories') and session_id in app.chat_histories:
164
  app.chat_histories[session_id] = []
165
+ logging.debug("Historique de chat réinitialisé.")
166
+
167
  # Réinitialiser la session de chat
168
  if hasattr(app, 'chat_sessions') and session_id in app.chat_sessions:
169
  app.chat_sessions[session_id] = client.chats.create(model="gemini-2.0-flash")
170
+ logging.debug("Session de chat réinitialisée dans le dictionnaire des sessions.")
171
+
172
  return jsonify({'status': 'success'})
173
 
174
  if __name__ == '__main__':
175
+ logging.info("Démarrage de l'application Flask avec le mode debug activé.")
176
+ app.run(debug=True)