Docfile commited on
Commit
affe748
·
verified ·
1 Parent(s): ee981e2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -15
app.py CHANGED
@@ -1,11 +1,13 @@
1
- #--- START OF FILE app - 2025-04-08T095242.046.py ---
2
-
3
  from flask import Flask, render_template, request, jsonify
4
  import google.generativeai as genai
5
  from google.generativeai import types
6
  import os
7
  from PIL import Image
8
  import io
 
 
 
 
9
 
10
  app = Flask(__name__)
11
 
@@ -41,11 +43,13 @@ default_model = genai.GenerativeModel(
41
 
42
  @app.route('/')
43
  def index():
 
44
  return render_template('index.html')
45
 
46
  @app.route('/api/francais', methods=['POST'])
47
  def gpt_francais():
48
  """Handles French questions with optional DeepThink model."""
 
49
  french_prompt = request.form.get('sujet', '').strip()
50
  choix = request.form.get('choix', '').strip()
51
  style = request.form.get('style', '').strip()
@@ -53,12 +57,15 @@ def gpt_francais():
53
  use_deepthink_str = request.form.get('use_deepthink', 'false')
54
  use_deepthink = use_deepthink_str.lower() == 'true'
55
 
 
 
56
  if not french_prompt:
 
57
  return jsonify({"output": "Veuillez saisir un thème."}), 400
58
 
59
  # MODIFICATION: Sélectionner le nom du modèle basé sur use_deepthink
60
  model_to_use_name = DEEPTHINK_MODEL_NAME if use_deepthink else STANDARD_MODEL_NAME
61
- print(f"Using model: {model_to_use_name}") # Log for debugging
62
 
63
  # Le reste de la logique de construction du prompt reste identique...
64
  if choix == "discuter":
@@ -179,31 +186,39 @@ def gpt_francais():
179
  try:
180
  # MODIFICATION: Instancier le modèle spécifique pour cette requête
181
  # Utiliser les mêmes configurations que le modèle par défaut
 
182
  selected_model = genai.GenerativeModel(
183
  model_name=model_to_use_name,
184
  generation_config=generation_config,
185
  safety_settings=safety_settings
186
  )
 
187
  response = selected_model.generate_content(prompt)
 
188
  return jsonify({"output": response.text}), 200
189
  except Exception as e:
190
  # Log l'erreur pour le débogage côté serveur
191
- print(f"Error generating content with model {model_to_use_name}: {e}")
192
  # Retourne un message d'erreur générique à l'utilisateur
193
  # Vérifier si l'erreur est due à un modèle invalide/non disponible
194
  if "model" in str(e).lower() and "not found" in str(e).lower():
 
195
  return jsonify({"output": f"Erreur: Le modèle '{model_to_use_name}' n'est pas accessible ou n'existe pas. Essayez sans l'option DeepThink."}), 500
196
- return jsonify({"output": f"Une erreur interne est survenue lors de la génération du contenu ({type(e).__name__}). Veuillez réessayer."}), 500
 
197
 
198
 
199
  @app.route('/api/etude-texte', methods=['POST'])
200
  def gpt_francais_cc():
201
  """Handles text analysis for French with multiple images (uses default model)."""
 
202
  if 'images' not in request.files:
 
203
  return jsonify({"output": "Aucune image n'a été téléchargée."}), 400
204
 
205
  images = request.files.getlist('images')
206
  if not images or all(not image.filename for image in images):
 
207
  return jsonify({"output": "Aucune image sélectionnée ou les fichiers sont vides."}), 400
208
 
209
  pre_prompt = "Analyse de manière exhaustive et structurée le contenu du devoir présenté dans les images suivantes. Identifie les questions, extrais le texte si présent, et réponds aux questions de manière détaillée en te basant uniquement sur les informations fournies dans les images."
@@ -212,10 +227,11 @@ def gpt_francais_cc():
212
  valid_images_found = False
213
  for image in images:
214
  if image and image.filename:
 
215
  try:
216
  img_bytes = image.read()
217
  if not img_bytes:
218
- print(f"Skipping empty file: {image.filename}")
219
  continue
220
 
221
  img = Image.open(io.BytesIO(img_bytes))
@@ -226,27 +242,30 @@ def gpt_francais_cc():
226
  valid_images_found = True
227
 
228
  except (IOError, SyntaxError) as e:
229
- print(f"Error processing image {image.filename}: {e}. It might be corrupted or not a valid image format.")
230
  except Exception as e:
231
- print(f"Unexpected error processing image {image.filename}: {e}")
232
 
233
  if not valid_images_found:
234
- return jsonify({"output": "Aucune image valide n'a été trouvée parmi les fichiers téléchargés."}), 400
 
235
 
236
  try:
237
  # Utilisation du modèle par défaut (non-DeepThink) pour l'analyse d'images
 
238
  response = default_model.generate_content(contents)
 
239
  return jsonify({"output": response.text}), 200
240
  except types.generation_types.BlockedPromptException as e:
241
- print(f"Content generation blocked: {e}")
242
- return jsonify({"output": "La génération de contenu a été bloquée car la requête ou les images contenaient potentiellement du contenu non autorisé."}), 400
243
  except Exception as e:
244
- print(f"Error during Gemini generation (etude-texte): {e}")
245
- return jsonify({"output": f"Une erreur interne est survenue lors de l'analyse des images ({type(e).__name__}). Veuillez réessayer."}), 500
246
 
247
 
248
  if __name__ == '__main__':
249
  # Désactiver le reloader Flask si vous avez des problèmes avec les instances multiples de modèle ou la mémoire
250
  # app.run(debug=True, use_reloader=False)
251
- app.run(debug=True)
252
- #--- END OF FILE app - 2025-04-08T095242.046.py ---
 
 
 
1
  from flask import Flask, render_template, request, jsonify
2
  import google.generativeai as genai
3
  from google.generativeai import types
4
  import os
5
  from PIL import Image
6
  import io
7
+ import logging
8
+
9
+ # Configuration du logging
10
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
11
 
12
  app = Flask(__name__)
13
 
 
43
 
44
  @app.route('/')
45
  def index():
46
+ logging.info("Rendering index.html")
47
  return render_template('index.html')
48
 
49
  @app.route('/api/francais', methods=['POST'])
50
  def gpt_francais():
51
  """Handles French questions with optional DeepThink model."""
52
+ logging.info("Received request at /api/francais")
53
  french_prompt = request.form.get('sujet', '').strip()
54
  choix = request.form.get('choix', '').strip()
55
  style = request.form.get('style', '').strip()
 
57
  use_deepthink_str = request.form.get('use_deepthink', 'false')
58
  use_deepthink = use_deepthink_str.lower() == 'true'
59
 
60
+ logging.info(f"Received data: french_prompt='{french_prompt}', choix='{choix}', style='{style}', use_deepthink='{use_deepthink}'")
61
+
62
  if not french_prompt:
63
+ logging.warning("French prompt is empty.")
64
  return jsonify({"output": "Veuillez saisir un thème."}), 400
65
 
66
  # MODIFICATION: Sélectionner le nom du modèle basé sur use_deepthink
67
  model_to_use_name = DEEPTHINK_MODEL_NAME if use_deepthink else STANDARD_MODEL_NAME
68
+ logging.info(f"Using model: {model_to_use_name}") # Log for debugging
69
 
70
  # Le reste de la logique de construction du prompt reste identique...
71
  if choix == "discuter":
 
186
  try:
187
  # MODIFICATION: Instancier le modèle spécifique pour cette requête
188
  # Utiliser les mêmes configurations que le modèle par défaut
189
+ logging.info(f"Creating GenerativeModel instance with model name: {model_to_use_name}")
190
  selected_model = genai.GenerativeModel(
191
  model_name=model_to_use_name,
192
  generation_config=generation_config,
193
  safety_settings=safety_settings
194
  )
195
+ logging.info("Generating content...")
196
  response = selected_model.generate_content(prompt)
197
+ logging.info("Content generated successfully.")
198
  return jsonify({"output": response.text}), 200
199
  except Exception as e:
200
  # Log l'erreur pour le débogage côté serveur
201
+ logging.exception(f"Error generating content with model {model_to_use_name}: {e}")
202
  # Retourne un message d'erreur générique à l'utilisateur
203
  # Vérifier si l'erreur est due à un modèle invalide/non disponible
204
  if "model" in str(e).lower() and "not found" in str(e).lower():
205
+ logging.error(f"Model '{model_to_use_name}' not found.")
206
  return jsonify({"output": f"Erreur: Le modèle '{model_to_use_name}' n'est pas accessible ou n'existe pas. Essayez sans l'option DeepThink."}), 500
207
+ logging.error(f"Internal error occurred: {e}")
208
+ return jsonify({"output":"Une erreur interne est survenue lors de la génération du contenu. Veuillez réessayer."}), 500
209
 
210
 
211
  @app.route('/api/etude-texte', methods=['POST'])
212
  def gpt_francais_cc():
213
  """Handles text analysis for French with multiple images (uses default model)."""
214
+ logging.info("Received request at /api/etude-texte")
215
  if 'images' not in request.files:
216
+ logging.warning("No images were uploaded.")
217
  return jsonify({"output": "Aucune image n'a été téléchargée."}), 400
218
 
219
  images = request.files.getlist('images')
220
  if not images or all(not image.filename for image in images):
221
+ logging.warning("No images selected or files are empty.")
222
  return jsonify({"output": "Aucune image sélectionnée ou les fichiers sont vides."}), 400
223
 
224
  pre_prompt = "Analyse de manière exhaustive et structurée le contenu du devoir présenté dans les images suivantes. Identifie les questions, extrais le texte si présent, et réponds aux questions de manière détaillée en te basant uniquement sur les informations fournies dans les images."
 
227
  valid_images_found = False
228
  for image in images:
229
  if image and image.filename:
230
+ logging.info(f"Processing image: {image.filename}")
231
  try:
232
  img_bytes = image.read()
233
  if not img_bytes:
234
+ logging.warning(f"Skipping empty file: {image.filename}")
235
  continue
236
 
237
  img = Image.open(io.BytesIO(img_bytes))
 
242
  valid_images_found = True
243
 
244
  except (IOError, SyntaxError) as e:
245
+ logging.error(f"Error processing image {image.filename}: {e}. It might be corrupted or not a valid image format.")
246
  except Exception as e:
247
+ logging.exception(f"Unexpected error processing image {image.filename}: {e}")
248
 
249
  if not valid_images_found:
250
+ logging.warning("No valid images were found among the uploaded files.")
251
+ return jsonify({"output": "Aucune image valide n'a été trouvée parmi les fichiers téléchargés."}), 400
252
 
253
  try:
254
  # Utilisation du modèle par défaut (non-DeepThink) pour l'analyse d'images
255
+ logging.info("Generating content with default model for image analysis...")
256
  response = default_model.generate_content(contents)
257
+ logging.info("Content generated successfully for image analysis.")
258
  return jsonify({"output": response.text}), 200
259
  except types.generation_types.BlockedPromptException as e:
260
+ logging.warning(f"Content generation blocked: {e}")
261
+ return jsonify({"output": "La génération de contenu a été bloquée car la requête ou les images contenaient potentiellement du contenu non autorisé."}), 400
262
  except Exception as e:
263
+ logging.exception(f"Error during generation (etude-texte): {e}")
264
+ return jsonify({"output":"Une erreur interne est survenue lors de l'analyse des images.Veuillez réessayer."}), 500
265
 
266
 
267
  if __name__ == '__main__':
268
  # Désactiver le reloader Flask si vous avez des problèmes avec les instances multiples de modèle ou la mémoire
269
  # app.run(debug=True, use_reloader=False)
270
+ logging.info("Starting the Flask app...")
271
+ app.run(debug=True)