Docfile commited on
Commit
7bfe8df
·
verified ·
1 Parent(s): a09ba33

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +85 -25
app.py CHANGED
@@ -3,6 +3,12 @@ import PIL.Image
3
  import google.generativeai as genai
4
  import os
5
  from tempfile import NamedTemporaryFile
 
 
 
 
 
 
6
 
7
  app = Flask(__name__)
8
 
@@ -35,8 +41,13 @@ GOOGLE_API_KEY = os.environ.get("TOKEN")
35
 
36
  genai.configure(api_key=GOOGLE_API_KEY)
37
 
38
-
 
 
39
  def generer_histoire(sujet, points):
 
 
 
40
  prompt = f"""
41
  je souhaite faire mon travail d'histoire sous forme de dissertation. le thème {sujet} et les différents point a détaillé sont : {points}
42
 
@@ -76,22 +87,25 @@ question d'ouverture
76
 
77
  """
78
 
79
- model = genai.GenerativeModel('gemini-2.0-flash', generation_config=generation_config, safety_settings=safety_settings)
80
- response = model.generate_content(prompt, request_options={"timeout": 600})
81
- return response.text
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
 
 
 
 
90
 
 
 
 
 
 
 
 
 
91
 
92
  @app.route('/')
93
  def index():
94
- #return " La plateforme est en maintenance "
 
95
  return render_template('histoire.html')
96
 
97
 
@@ -100,6 +114,9 @@ def index():
100
 
101
  @app.route('/api/histoire', methods=['POST'])
102
  def submit_histoire():
 
 
 
103
  # Récupération des données
104
  sujet = request.form.get('sujet-histoire', '').strip()
105
  points = [
@@ -107,22 +124,29 @@ def submit_histoire():
107
  request.form.get('point2-histoire', '').strip(),
108
  request.form.get('point3-histoire', '').strip()
109
  ]
 
 
110
 
111
  if not sujet or not all(points):
 
112
  return jsonify({"error": "Tous les champs sont obligatoires"}), 400
113
 
114
  try:
115
-
116
  dissertation = generer_histoire(sujet,points)
117
-
118
 
119
  return jsonify({"output": dissertation}), 200
120
 
121
  except Exception as e:
 
122
  return jsonify({"error": str(e)}), 500
123
 
124
  @app.route('/api/geographie', methods=['POST'])
125
  def submit_geographie():
 
 
 
126
  # Récupération des données
127
  sujet = request.form.get('sujet-geographie', '').strip()
128
  points = [
@@ -130,53 +154,77 @@ def submit_geographie():
130
  request.form.get('point2-geographie', '').strip(),
131
  request.form.get('point3-geographie', '').strip()
132
  ]
 
 
133
 
134
  if not sujet or not all(points):
 
135
  return jsonify({"error": "Tous les champs sont obligatoires"}), 400
136
 
137
  try:
 
138
  # Génération de l'introduction
139
  dissertation = generer_histoire(sujet,points)
 
140
 
141
  return jsonify({"output": dissertation}), 200
142
 
143
  except Exception as e:
 
144
  return jsonify({"error": str(e)}), 500
145
 
146
  def analyze_images(images, prompt):
147
  """Analyse les images fournies et génère une réponse textuelle."""
148
-
149
- model = genai.GenerativeModel('gemini-2.0-flash')
150
- response = model.generate_content(
151
- [prompt, *images],
152
- generation_config=generation_config,
153
- safety_settings=safety_settings
154
- )
155
-
156
- return response.text
157
-
 
 
 
 
 
 
 
 
 
 
158
  @app.route('/api/histoire-type2', methods=['POST'])
159
  def submit_histoire_type2():
 
 
 
160
  # Récupération des données
161
  sujet = request.form.get('sujet-histoire-type2', '').strip()
162
 
163
  if 'images-histoire-type2' not in request.files:
 
164
  return jsonify({"error": "Aucune image n'a été envoyée."}), 400
165
 
166
  files = request.files.getlist('images-histoire-type2')
167
 
168
  if not sujet:
 
169
  return jsonify({"error": "Le champ sujet est obligatoire"}), 400
170
 
171
  images = []
172
  for file in files:
173
  if file.filename == '':
 
174
  return jsonify({"error": "Un ou plusieurs fichiers n'ont pas de nom."}), 400
175
 
176
  try:
177
  img = PIL.Image.open(file)
178
  images.append(img)
 
179
  except Exception as e:
 
180
  return jsonify({"error": f"Impossible de lire l'image : {file.filename}. Erreur : {str(e)}"}), 400
181
 
182
  try:
@@ -227,30 +275,39 @@ phrase d'ouverture
227
  return jsonify({"output": response_text}), 200
228
 
229
  except Exception as e:
 
230
  return jsonify({"error": str(e)}), 500
231
 
232
  @app.route('/api/geographie-type2', methods=['POST'])
233
  def submit_geographie_type2():
 
 
 
234
  # Récupération des données
235
  sujet = request.form.get('sujet-geographie-type2', '').strip()
236
 
237
  if 'images-geographie-type2' not in request.files:
 
238
  return jsonify({"error": "Aucune image n'a été envoyée."}), 400
239
 
240
  files = request.files.getlist('images-geographie-type2')
241
 
242
  if not sujet:
 
243
  return jsonify({"error": "Le champ sujet est obligatoire"}), 400
244
 
245
  images = []
246
  for file in files:
247
  if file.filename == '':
 
248
  return jsonify({"error": "Un ou plusieurs fichiers n'ont pas de nom."}), 400
249
 
250
  try:
251
  img = PIL.Image.open(file)
252
  images.append(img)
 
253
  except Exception as e:
 
254
  return jsonify({"error": f"Impossible de lire l'image : {file.filename}. Erreur : {str(e)}"}), 400
255
 
256
  try:
@@ -301,5 +358,8 @@ phrase d'ouverture
301
  return jsonify({"output": response_text}), 200
302
 
303
  except Exception as e:
 
304
  return jsonify({"error": str(e)}), 500
305
-
 
 
 
3
  import google.generativeai as genai
4
  import os
5
  from tempfile import NamedTemporaryFile
6
+ import logging
7
+ import traceback # Import traceback
8
+
9
+ # Configuration du logging
10
+ logging.basicConfig(level=logging.DEBUG, # Définir le niveau de logging à DEBUG
11
+ format='%(asctime)s - %(levelname)s - %(message)s')
12
 
13
  app = Flask(__name__)
14
 
 
41
 
42
  genai.configure(api_key=GOOGLE_API_KEY)
43
 
44
+ logging.info("Gemini API configuré.")
45
+
46
+
47
  def generer_histoire(sujet, points):
48
+ """Génère une histoire à partir d'un sujet et de points donnés."""
49
+ logging.info(f"Début de la génération de l'histoire avec sujet: {sujet} et points: {points}")
50
+
51
  prompt = f"""
52
  je souhaite faire mon travail d'histoire sous forme de dissertation. le thème {sujet} et les différents point a détaillé sont : {points}
53
 
 
87
 
88
  """
89
 
90
+ logging.debug(f"Prompt utilisé pour Gemini: {prompt}")
 
 
 
 
 
 
 
 
 
91
 
92
+ try:
93
+ model = genai.GenerativeModel('gemini-2.0-flash', generation_config=generation_config, safety_settings=safety_settings)
94
+ logging.info("Modèle Gemini initialisé.")
95
 
96
+ response = model.generate_content(prompt, request_options={"timeout": 600})
97
+ logging.info("Réponse de Gemini reçue.")
98
+ logging.debug(f"Réponse brute de Gemini: {response}")
99
+ return response.text
100
+ except Exception as e:
101
+ logging.error(f"Erreur lors de la génération de l'histoire: {e}")
102
+ logging.error(traceback.format_exc()) # Log the full traceback
103
+ raise
104
 
105
  @app.route('/')
106
  def index():
107
+ """Route pour la page d'accueil."""
108
+ logging.info("Accès à la page d'accueil.")
109
  return render_template('histoire.html')
110
 
111
 
 
114
 
115
  @app.route('/api/histoire', methods=['POST'])
116
  def submit_histoire():
117
+ """Route pour soumettre un sujet d'histoire et générer une dissertation."""
118
+ logging.info("Requête POST reçue sur /api/histoire")
119
+
120
  # Récupération des données
121
  sujet = request.form.get('sujet-histoire', '').strip()
122
  points = [
 
124
  request.form.get('point2-histoire', '').strip(),
125
  request.form.get('point3-histoire', '').strip()
126
  ]
127
+
128
+ logging.debug(f"Sujet reçu: {sujet}, Points reçus: {points}")
129
 
130
  if not sujet or not all(points):
131
+ logging.warning("Tous les champs ne sont pas remplis.")
132
  return jsonify({"error": "Tous les champs sont obligatoires"}), 400
133
 
134
  try:
135
+ logging.info("Début de la génération de la dissertation.")
136
  dissertation = generer_histoire(sujet,points)
137
+ logging.info("Dissertation générée avec succès.")
138
 
139
  return jsonify({"output": dissertation}), 200
140
 
141
  except Exception as e:
142
+ logging.exception("Erreur lors du traitement de la requête /api/histoire") # Use logging.exception to log the exception with traceback
143
  return jsonify({"error": str(e)}), 500
144
 
145
  @app.route('/api/geographie', methods=['POST'])
146
  def submit_geographie():
147
+ """Route pour soumettre un sujet de géographie et générer une dissertation."""
148
+ logging.info("Requête POST reçue sur /api/geographie")
149
+
150
  # Récupération des données
151
  sujet = request.form.get('sujet-geographie', '').strip()
152
  points = [
 
154
  request.form.get('point2-geographie', '').strip(),
155
  request.form.get('point3-geographie', '').strip()
156
  ]
157
+
158
+ logging.debug(f"Sujet reçu: {sujet}, Points reçus: {points}")
159
 
160
  if not sujet or not all(points):
161
+ logging.warning("Tous les champs ne sont pas remplis.")
162
  return jsonify({"error": "Tous les champs sont obligatoires"}), 400
163
 
164
  try:
165
+ logging.info("Début de la génération de la dissertation.")
166
  # Génération de l'introduction
167
  dissertation = generer_histoire(sujet,points)
168
+ logging.info("Dissertation générée avec succès.")
169
 
170
  return jsonify({"output": dissertation}), 200
171
 
172
  except Exception as e:
173
+ logging.exception("Erreur lors du traitement de la requête /api/geographie") # Use logging.exception to log the exception with traceback
174
  return jsonify({"error": str(e)}), 500
175
 
176
  def analyze_images(images, prompt):
177
  """Analyse les images fournies et génère une réponse textuelle."""
178
+ logging.info("Début de l'analyse des images.")
179
+ logging.debug(f"Prompt utilisé pour l'analyse d'images: {prompt}")
180
+ try:
181
+ model = genai.GenerativeModel('gemini-2.0-flash')
182
+ logging.info("Modèle Gemini initialisé pour l'analyse d'images.")
183
+
184
+ response = model.generate_content(
185
+ [prompt, *images],
186
+ generation_config=generation_config,
187
+ safety_settings=safety_settings
188
+ )
189
+ logging.info("Réponse de Gemini reçue pour l'analyse d'images.")
190
+ logging.debug(f"Réponse brute de Gemini (analyse d'images): {response}")
191
+ return response.text
192
+ except Exception as e:
193
+ logging.error(f"Erreur lors de l'analyse des images: {e}")
194
+ logging.error(traceback.format_exc()) # Log the full traceback
195
+ raise
196
+
197
+
198
  @app.route('/api/histoire-type2', methods=['POST'])
199
  def submit_histoire_type2():
200
+ """Route pour soumettre un sujet d'histoire et des images et générer une dissertation."""
201
+ logging.info("Requête POST reçue sur /api/histoire-type2")
202
+
203
  # Récupération des données
204
  sujet = request.form.get('sujet-histoire-type2', '').strip()
205
 
206
  if 'images-histoire-type2' not in request.files:
207
+ logging.warning("Aucune image n'a été envoyée.")
208
  return jsonify({"error": "Aucune image n'a été envoyée."}), 400
209
 
210
  files = request.files.getlist('images-histoire-type2')
211
 
212
  if not sujet:
213
+ logging.warning("Le champ sujet est obligatoire.")
214
  return jsonify({"error": "Le champ sujet est obligatoire"}), 400
215
 
216
  images = []
217
  for file in files:
218
  if file.filename == '':
219
+ logging.warning("Un ou plusieurs fichiers n'ont pas de nom.")
220
  return jsonify({"error": "Un ou plusieurs fichiers n'ont pas de nom."}), 400
221
 
222
  try:
223
  img = PIL.Image.open(file)
224
  images.append(img)
225
+ logging.debug(f"Image {file.filename} chargée avec succès.")
226
  except Exception as e:
227
+ logging.error(f"Impossible de lire l'image : {file.filename}. Erreur : {str(e)}")
228
  return jsonify({"error": f"Impossible de lire l'image : {file.filename}. Erreur : {str(e)}"}), 400
229
 
230
  try:
 
275
  return jsonify({"output": response_text}), 200
276
 
277
  except Exception as e:
278
+ logging.exception("Erreur lors du traitement de la requête /api/histoire-type2") # Use logging.exception to log the exception with traceback
279
  return jsonify({"error": str(e)}), 500
280
 
281
  @app.route('/api/geographie-type2', methods=['POST'])
282
  def submit_geographie_type2():
283
+ """Route pour soumettre un sujet de géographie et des images et générer une dissertation."""
284
+ logging.info("Requête POST reçue sur /api/geographie-type2")
285
+
286
  # Récupération des données
287
  sujet = request.form.get('sujet-geographie-type2', '').strip()
288
 
289
  if 'images-geographie-type2' not in request.files:
290
+ logging.warning("Aucune image n'a été envoyée.")
291
  return jsonify({"error": "Aucune image n'a été envoyée."}), 400
292
 
293
  files = request.files.getlist('images-geographie-type2')
294
 
295
  if not sujet:
296
+ logging.warning("Le champ sujet est obligatoire.")
297
  return jsonify({"error": "Le champ sujet est obligatoire"}), 400
298
 
299
  images = []
300
  for file in files:
301
  if file.filename == '':
302
+ logging.warning("Un ou plusieurs fichiers n'ont pas de nom.")
303
  return jsonify({"error": "Un ou plusieurs fichiers n'ont pas de nom."}), 400
304
 
305
  try:
306
  img = PIL.Image.open(file)
307
  images.append(img)
308
+ logging.debug(f"Image {file.filename} chargée avec succès.")
309
  except Exception as e:
310
+ logging.error(f"Impossible de lire l'image : {file.filename}. Erreur : {str(e)}")
311
  return jsonify({"error": f"Impossible de lire l'image : {file.filename}. Erreur : {str(e)}"}), 400
312
 
313
  try:
 
358
  return jsonify({"output": response_text}), 200
359
 
360
  except Exception as e:
361
+ logging.exception("Erreur lors du traitement de la requête /api/geographie-type2") # Use logging.exception to log the exception with traceback
362
  return jsonify({"error": str(e)}), 500
363
+
364
+ if __name__ == '__main__':
365
+ app.run(debug=True)