mohamedlabed commited on
Commit
214b1ad
·
verified ·
1 Parent(s): 3889c5a

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +80 -51
app.py CHANGED
@@ -2,6 +2,7 @@
2
  """
3
  Educational AI Assistant for Arabic Lessons - Hugging Face Spaces Version
4
  Spécialement optimisée pour la reconnaissance vocale arabe
 
5
  """
6
 
7
  import gradio as gr
@@ -167,14 +168,18 @@ def generate_questions(text, progress=None):
167
  if progress:
168
  progress(0.8, "Génération des questions...")
169
 
170
- # Version simplifiée avec des questions génériques
171
- questions = """1. ما هي الفكرة الرئيسية للدرس؟
 
172
  2. ما هي أهم المفاهيم التي تم شرحها في هذا الدرس؟
173
  3. كيف يمكن تطبيق المعلومات الواردة في هذا الدرس في الحياة العملية؟
174
  4. ما هي العلاقة بين المفاهيم المختلفة التي تم تقديمها؟
175
  5. لو طلب منك تلخيص هذا الدرس في ثلاث نقاط، ماذا ستكتب؟"""
176
-
177
- return questions
 
 
 
178
 
179
  # Fonction pour générer une carte mentale
180
  def generate_mind_map(text, progress=None):
@@ -185,38 +190,42 @@ def generate_mind_map(text, progress=None):
185
  if progress:
186
  progress(0.9, "Création de la carte mentale...")
187
 
188
- # Version ultra-simplifiée avec vérification des indices
189
- lines = text.split('.')
190
-
191
- # Création d'une structure Markdown basique
192
- markdown_map = "# خريطة ذهنية للدرس\n\n"
193
-
194
- # Titre principal - avec vérification que lines n'est pas vide
195
- if lines and len(lines) > 0 and lines[0].strip():
196
- main_idea = lines[0].strip()[:100] + ("..." if len(lines[0]) > 100 else "")
197
- markdown_map += f"## الموضوع الرئيسي\n- {main_idea}\n\n"
198
- else:
199
- markdown_map += f"## الموضوع الرئيسي\n- (لم يتم العثور على موضوع رئيسي)\n\n"
200
-
201
- # Points principaux (limités à 3 pour simplicité)
202
- markdown_map += "## النقاط الرئيسية\n\n"
203
-
204
- # Vérifier s'il y a des lignes supplémentaires
205
- if len(lines) > 1:
206
- count = 0
207
- for line in lines[1:]:
208
- if line and line.strip() and len(line.strip()) > 15:
209
- point_text = line.strip()[:80] + ("..." if len(line) > 80 else "")
210
- markdown_map += f"### نقطة {count+1}\n- {point_text}\n\n"
211
- count += 1
212
- if count >= 3:
213
- break
214
-
215
- # Si aucun point n'a été trouvé, ajouter un message
216
- if "### نقطة" not in markdown_map:
217
- markdown_map += "### ملاحظة\n- لم يتم العثور على نقاط رئيسية كافية في النص\n\n"
218
-
219
- return markdown_map
 
 
 
 
220
 
221
  # Fonction principale de traitement
222
  def process_lesson(file_obj, progress=gr.Progress()):
@@ -235,35 +244,55 @@ def process_lesson(file_obj, progress=gr.Progress()):
235
  progress(0.2, "Préparation du fichier...")
236
 
237
  # Traitement du fichier selon son type
238
- if file_extension in ['.mp4', '.mov', '.avi', '.mkv']:
239
- audio_path = extract_audio(file_path)
240
- if not audio_path:
241
- return "Échec de l'extraction audio.", "", "", ""
242
- elif file_extension in ['.mp3', '.wav', '.ogg', '.flac', '.m4a']:
243
- audio_path = file_path
244
- else:
245
- return f"Type de fichier non pris en charge: {file_extension}. Veuillez télécharger un fichier audio ou vidéo.", "", "", ""
 
 
 
 
246
 
247
  # 1. Transcription
248
- transcription = transcribe_audio(audio_path, progress)
 
 
 
 
249
 
250
  # Libérer la mémoire après transcription
251
  clear_gpu_memory()
252
 
253
  # 2. Résumé (seulement si la transcription a réussi)
254
- if isinstance(transcription, str) and "échoué" not in transcription.lower():
255
- summary = summarize_text(transcription, progress)
256
- else:
257
- summary = "Impossible de générer un résumé car la transcription a échoué."
 
 
 
 
258
 
259
  # Libérer la mémoire après résumé
260
  clear_gpu_memory()
261
 
262
  # 3. Génération de questions (simplifiée)
263
- questions = generate_questions(transcription, progress)
 
 
 
 
264
 
265
  # 4. Génération de la carte mentale (simplifiée)
266
- mind_map = generate_mind_map(summary, progress)
 
 
 
 
267
 
268
  progress(1.0, "Terminé!")
269
  return transcription, summary, questions, mind_map
 
2
  """
3
  Educational AI Assistant for Arabic Lessons - Hugging Face Spaces Version
4
  Spécialement optimisée pour la reconnaissance vocale arabe
5
+ Version avec gestion d'erreurs renforcée
6
  """
7
 
8
  import gradio as gr
 
168
  if progress:
169
  progress(0.8, "Génération des questions...")
170
 
171
+ try:
172
+ # Version simplifiée avec des questions génériques
173
+ questions = """1. ما هي الفكرة الرئيسية للدرس؟
174
  2. ما هي أهم المفاهيم التي تم شرحها في هذا الدرس؟
175
  3. كيف يمكن تطبيق المعلومات الواردة في هذا الدرس في الحياة العملية؟
176
  4. ما هي العلاقة بين المفاهيم المختلفة التي تم تقديمها؟
177
  5. لو طلب منك تلخيص هذا الدرس في ثلاث نقاط، ماذا ستكتب؟"""
178
+
179
+ return questions
180
+ except Exception as e:
181
+ print(f"Erreur dans generate_questions: {e}")
182
+ return f"Erreur lors de la génération des questions: {str(e)}"
183
 
184
  # Fonction pour générer une carte mentale
185
  def generate_mind_map(text, progress=None):
 
190
  if progress:
191
  progress(0.9, "Création de la carte mentale...")
192
 
193
+ try:
194
+ # Version ultra-simplifiée avec vérification des indices
195
+ lines = text.split('.')
196
+
197
+ # Création d'une structure Markdown basique
198
+ markdown_map = "# خريطة ذهنية للدرس\n\n"
199
+
200
+ # Titre principal - avec vérification que lines n'est pas vide
201
+ if lines and len(lines) > 0 and lines[0].strip():
202
+ main_idea = lines[0].strip()[:100] + ("..." if len(lines[0]) > 100 else "")
203
+ markdown_map += f"## الموضوع الرئيسي\n- {main_idea}\n\n"
204
+ else:
205
+ markdown_map += f"## الموضوع الرئيسي\n- (لم يتم العثور على موضوع رئيسي)\n\n"
206
+
207
+ # Points principaux (limités à 3 pour simplicité)
208
+ markdown_map += "## النقاط الرئيسية\n\n"
209
+
210
+ # Vérifier s'il y a des lignes supplémentaires
211
+ if len(lines) > 1:
212
+ count = 0
213
+ for line in lines[1:]:
214
+ if line and line.strip() and len(line.strip()) > 15:
215
+ point_text = line.strip()[:80] + ("..." if len(line) > 80 else "")
216
+ markdown_map += f"### نقطة {count+1}\n- {point_text}\n\n"
217
+ count += 1
218
+ if count >= 3:
219
+ break
220
+
221
+ # Si aucun point n'a été trouvé, ajouter un message
222
+ if "### نقطة" not in markdown_map:
223
+ markdown_map += "### ملاحظة\n- لم يتم العثور على نقاط رئيسية كافية في النص\n\n"
224
+
225
+ return markdown_map
226
+ except Exception as e:
227
+ print(f"Erreur dans generate_mind_map: {e}")
228
+ return f"Erreur lors de la création de la carte mentale: {str(e)}"
229
 
230
  # Fonction principale de traitement
231
  def process_lesson(file_obj, progress=gr.Progress()):
 
244
  progress(0.2, "Préparation du fichier...")
245
 
246
  # Traitement du fichier selon son type
247
+ try:
248
+ if file_extension in ['.mp4', '.mov', '.avi', '.mkv']:
249
+ audio_path = extract_audio(file_path)
250
+ if not audio_path:
251
+ return "Échec de l'extraction audio.", "", "", ""
252
+ elif file_extension in ['.mp3', '.wav', '.ogg', '.flac', '.m4a']:
253
+ audio_path = file_path
254
+ else:
255
+ return f"Type de fichier non pris en charge: {file_extension}. Veuillez télécharger un fichier audio ou vidéo.", "", "", ""
256
+ except Exception as e:
257
+ print(f"Erreur lors de la préparation du fichier: {e}")
258
+ return f"Erreur lors de la préparation du fichier: {str(e)}", "", "", ""
259
 
260
  # 1. Transcription
261
+ try:
262
+ transcription = transcribe_audio(audio_path, progress)
263
+ except Exception as e:
264
+ print(f"Erreur lors de la transcription: {e}")
265
+ transcription = f"La transcription a échoué: {str(e)}"
266
 
267
  # Libérer la mémoire après transcription
268
  clear_gpu_memory()
269
 
270
  # 2. Résumé (seulement si la transcription a réussi)
271
+ try:
272
+ if isinstance(transcription, str) and "échoué" not in transcription.lower():
273
+ summary = summarize_text(transcription, progress)
274
+ else:
275
+ summary = "Impossible de générer un résumé car la transcription a échoué."
276
+ except Exception as e:
277
+ print(f"Erreur lors du résumé: {e}")
278
+ summary = f"Le résumé a échoué: {str(e)}"
279
 
280
  # Libérer la mémoire après résumé
281
  clear_gpu_memory()
282
 
283
  # 3. Génération de questions (simplifiée)
284
+ try:
285
+ questions = generate_questions(transcription, progress)
286
+ except Exception as e:
287
+ print(f"Erreur lors de la génération des questions: {e}")
288
+ questions = f"La génération des questions a échoué: {str(e)}"
289
 
290
  # 4. Génération de la carte mentale (simplifiée)
291
+ try:
292
+ mind_map = generate_mind_map(summary, progress)
293
+ except Exception as e:
294
+ print(f"Erreur lors de la génération de la carte mentale: {e}")
295
+ mind_map = f"La génération de la carte mentale a échoué: {str(e)}"
296
 
297
  progress(1.0, "Terminé!")
298
  return transcription, summary, questions, mind_map