bambadij commited on
Commit
0f0a413
·
verified ·
1 Parent(s): d66a658

update analyse globale

Browse files
Files changed (1) hide show
  1. app.py +46 -54
app.py CHANGED
@@ -231,24 +231,54 @@ async def generate_text(
231
  return {"summary_text_2": generated_text}
232
  @app.post("/analyse_globale/")
233
  async def generate_global_analysis(file: UploadFile = File(...)):
234
- # Check file size
235
  contents = await file.read()
 
 
236
  file_size = len(contents)
237
- if file_size > 5_000_000: # 5MB limit
238
- return {"error": "File size exceeds the 5MB limit. The file will be sampled."}
239
 
240
- # Read the uploaded CSV file
241
  try:
242
  df = pd.read_csv(io.StringIO(contents.decode('utf-8')))
243
  except Exception as e:
244
- return {"error": f"Error reading CSV file: {str(e)}"}
245
 
246
- if len(df) > 1000: # Adjust this number based on your needs
247
- df = df.sample(n=1000, random_state=42)
 
248
 
249
- total_plaintes = len(df)
 
 
 
 
 
 
 
 
250
 
251
- # Analyse par domaine (code existant)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  domain_analyses = ""
253
  for domain, group in df.groupby('DOMAINE'):
254
  domain_summary = group.groupby('STATUT').size().to_dict()
@@ -264,62 +294,24 @@ async def generate_global_analysis(file: UploadFile = File(...)):
264
  """
265
  domain_analyses += domain_analysis
266
 
267
- # Analyse des blocages
268
- blocages_analysis = df[df['STATUT'] == 'EN COURS'].groupby('DOMAINE').size().sort_values(ascending=False)
269
- blocages_text = "\n".join([f" - {domain}: {count} plaintes en cours" for domain, count in blocages_analysis.items()])
270
-
271
- # Analyse de la réactivité (basée sur le nombre de plaintes non traitées)
272
- reactivite_analysis = df[df['STATUT'].isin(['EN COURS', 'NON PRIS EN CHARGE'])].groupby('DOMAINE').size().sort_values(ascending=False)
273
- reactivite_text = "\n".join([f" - {domain}: {count} plaintes non résolues" for domain, count in reactivite_analysis.items()])
274
-
275
- # Mise à jour du prompt global
276
- prompt_global = f"""
277
- Analyse globale des plaintes pour tous les domaines :
278
- Résumé général :
279
- - Total des plaintes analysées : {total_plaintes}
280
- Répartition des plaintes par domaine :
281
- {domain_analyses}
282
- Analyse des blocages :
283
- Les domaines suivants présentent le plus grand nombre de plaintes en cours, ce qui peut indiquer des blocages dans le travail :
284
- {blocages_text}
285
- Analyse de la réactivité :
286
- Les domaines suivants ont le plus grand nombre de plaintes non résolues (en cours ou non prises en charge), ce qui peut indiquer une moindre réactivité :
287
- {reactivite_text}
288
- Basé sur ces données :
289
- 1. Identifiez les 2-3 principaux facteurs qui semblent bloquer le travail le plus, en vous basant sur les domaines avec le plus de plaintes en cours.
290
- 2. Analysez pourquoi certains domaines semblent moins réactifs que d'autres, en vous basant sur le nombre de plaintes non résolues.
291
- 3. Proposez 3-4 actions concrètes qui pourraient être mises en place pour :
292
- a) Débloquer le travail dans les domaines les plus affectés
293
- b) Améliorer la réactivité dans les domaines moins performants
294
- 4. Expliquez comment ces actions pourraient améliorer globalement la gestion des plaintes et réduire les temps de résolution.
295
- 5. Recommandez des mesures spécifiques pour suivre et améliorer la performance dans les domaines identifiés comme problématiques.
296
- En résumé, présentez une analyse focalisée sur les blocages du travail et la réactivité des différents domaines, avec des recommandations concrètes pour améliorer la situation.
297
- """
298
- # Format the prompt with the analyzed data
299
- # formatted_prompt = prompt_global.format(
300
- # total_plaintes=len(df),
301
- # month_most_domains=month_with_most_domains,
302
- # dominant_domain=dominant_domain,
303
- # domain_analyses=domain_analyses
304
- # )
305
-
306
- # Create the request for the API
307
  try:
 
308
  completion = client.chat.completions.create(
309
  model="meta/llama-3.1-8b-instruct",
310
- messages=[{"role": "user", "content": prompt_global }],
311
- temperature=0.2,
312
- top_p=0.9,
313
- stream=True
314
  )
315
  except Exception as e:
316
- return {"error": f"Error generating text: {str(e)}"}
317
 
 
318
  generated_text = ""
319
  for chunk in completion:
320
  if chunk.choices[0].delta.content is not None:
321
  generated_text += chunk.choices[0].delta.content
322
 
 
323
  return {"global_analysis_text": generated_text}
324
  if __name__ == "__main__":
325
  uvicorn.run("app:app",reload=True)
 
231
  return {"summary_text_2": generated_text}
232
  @app.post("/analyse_globale/")
233
  async def generate_global_analysis(file: UploadFile = File(...)):
234
+ # Lire le fichier téléchargé
235
  contents = await file.read()
236
+
237
+ # Vérification de la taille du fichier
238
  file_size = len(contents)
239
+ if file_size > 5_000_000: # Limite de 5 Mo
240
+ return {"error": "La taille du fichier dépasse la limite de 5 Mo. Le fichier sera échantillonné."}
241
 
242
+ # Lire le fichier CSV téléchargé
243
  try:
244
  df = pd.read_csv(io.StringIO(contents.decode('utf-8')))
245
  except Exception as e:
246
+ return {"error": f"Erreur lors de la lecture du fichier CSV : {str(e)}"}
247
 
248
+ # Échantillonner les données si elles sont trop grandes
249
+ if len(df) > 1000: # Ajustez ce nombre selon vos besoins
250
+ df = df.sample(n=500, random_state=42)
251
 
252
+ # Convertir le DataFrame en chaîne de caractères
253
+ try:
254
+ text_to_generate = df.to_string(index=False)
255
+ except Exception as e:
256
+ return {"error": f"Erreur lors de la conversion du DataFrame en chaîne : {str(e)}"}
257
+
258
+ # S'assurer que le texte généré est dans les limites de taille
259
+ if len(text_to_generate.encode('utf-8')) > 5_000_000:
260
+ return {"error": "Le texte généré dépasse la limite de taille même après échantillonnage. Veuillez réduire davantage les données."}
261
 
262
+ # Définir le prompt de l'analyse globale
263
+ prompt_global = """
264
+ Analyse globale des plaintes pour tous les domaines :
265
+ Résumé général :
266
+ - Total des plaintes : {len(df)}
267
+ Répartition des plaintes par domaine :
268
+ {domain_analyses}
269
+ Problèmes récurrents observés dans tous les domaines :
270
+ - lister 1 à 2 problèmes les plus fréquents
271
+ Actions entreprises :
272
+ - Action 1 : Description de l'action
273
+ Recommandations pour améliorer la gestion des plaintes :
274
+ 1. [Recommandation 1] : Détails
275
+
276
+ En résumé, voici les principales tendances et recommandations pour améliorer la gestion des plaintes et résoudre les problèmes identifiés à travers tous les domaines.
277
+ ---
278
+ Utilisez ces informations pour améliorer la qualité du service et optimiser la gestion des plaintes.
279
+ """
280
+
281
+ # Groupement des données par domaine
282
  domain_analyses = ""
283
  for domain, group in df.groupby('DOMAINE'):
284
  domain_summary = group.groupby('STATUT').size().to_dict()
 
294
  """
295
  domain_analyses += domain_analysis
296
 
297
+ # Création de la requête pour l'API (exemple avec un modèle fictif)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  try:
299
+ # Remplacez cette partie par la logique spécifique à votre API
300
  completion = client.chat.completions.create(
301
  model="meta/llama-3.1-8b-instruct",
302
+ messages=[{"role": "user", "content": prompt_global.format(domain_analyses=domain_analyses) + text_to_generate}],
303
+ temperature=0.2, top_p=0.9, stream=True
 
 
304
  )
305
  except Exception as e:
306
+ return {"error": f"Erreur lors de la génération du texte : {str(e)}"}
307
 
308
+ # Récupération du texte généré
309
  generated_text = ""
310
  for chunk in completion:
311
  if chunk.choices[0].delta.content is not None:
312
  generated_text += chunk.choices[0].delta.content
313
 
314
+ # Retour du texte généré
315
  return {"global_analysis_text": generated_text}
316
  if __name__ == "__main__":
317
  uvicorn.run("app:app",reload=True)