bambadij commited on
Commit
a536ecc
·
verified ·
1 Parent(s): b5a1316
Files changed (1) hide show
  1. app.py +55 -39
app.py CHANGED
@@ -234,7 +234,6 @@ async def generate_global_analysis(file: UploadFile = File(...)):
234
  # Check file size
235
  contents = await file.read()
236
  file_size = len(contents)
237
-
238
  if file_size > 5_000_000: # 5MB limit
239
  return {"error": "File size exceeds the 5MB limit. The file will be sampled."}
240
 
@@ -246,72 +245,89 @@ async def generate_global_analysis(file: UploadFile = File(...)):
246
 
247
  # Sample the data if it's too large
248
  if len(df) > 1000: # Adjust this number based on your needs
249
- df = df.sample(n=100, random_state=42)
250
 
251
- # Convert the DataFrame to a string
252
- try:
253
- text_to_generate = df.to_string(index=False)
254
- except Exception as e:
255
- return {"error": f"Error converting DataFrame to string: {str(e)}"}
256
 
257
- # Ensure the generated text is within size limits
258
- if len(text_to_generate.encode('utf-8')) > 5_000_000:
259
- return {"error": "Generated text exceeds size limit even after sampling. Please reduce the data further."}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
 
261
  # Define the global analysis prompt
262
  prompt_global = """
263
  Analyse globale des plaintes pour tous les domaines :
264
 
265
  **Résumé général :**
 
 
 
266
 
267
- - Total des plaintes : [Nombre total de plaintes]
268
-
269
  **Répartition des plaintes par domaine :**
270
-
271
  {domain_analyses}
272
 
273
- **Problèmes récurrents observés dans tous les domaines :**
274
-
275
- - lister 1 à 2 probléme les plus fréquents
 
276
 
 
 
277
 
278
  **Actions entreprises :**
279
-
280
  - Action 1 : Description de l'action
281
 
282
  **Recommandations pour améliorer la gestion des plaintes :**
283
-
284
  1. **[Recommandation 1]** : Détails
285
 
 
 
 
286
 
287
- 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.
288
 
289
  ---
290
-
291
- Utilisez ces informations pour améliorer la qualité du service et optimiser la gestion des plaintes.
292
  """
293
 
294
- # Group data by domain
295
- domain_analyses = ""
296
- for domain, group in df.groupby('DOMAINE'):
297
- domain_summary = group.groupby('STATUT').size().to_dict()
298
- domain_analysis = f"""
299
- - Domaine "{domain}" :
300
- - Total des plaintes : {len(group)}
301
- - Répartition par statut :
302
- - En cours : {domain_summary.get('EN COURS', 0)}
303
- - Transférées : {domain_summary.get('TRANSFERE', 0)}
304
- - Fermées : {domain_summary.get('FERME', 0)}
305
- - Non pris en charge : {domain_summary.get('NON PRIS EN CHARGE', 0)}
306
- - Autres statuts : {sum(v for k, v in domain_summary.items() if k not in ['EN COURS', 'TRANSFERE', 'FERME', 'NON PRIS EN CHARGE'])}
307
- """
308
- domain_analyses += domain_analysis
309
 
310
- # Create the request for the API
311
  try:
312
  completion = client.chat.completions.create(
313
- model="meta/llama-3.1-8b-instruct",
314
- messages=[{"role": "user", "content": prompt_global.format(domain_analyses=domain_analyses) + text_to_generate}],
315
  temperature=0.2,
316
  top_p=0.9,
317
  stream=True
 
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
 
 
245
 
246
  # Sample the data if it's too large
247
  if len(df) > 1000: # Adjust this number based on your needs
248
+ df = df.sample(n=1000, random_state=42)
249
 
250
+ # Ensure 'DATE' column exists and convert to datetime
251
+ if 'DATE' not in df.columns:
252
+ return {"error": "The CSV file must contain a 'DATE' column."}
253
+ df['DATE'] = pd.to_datetime(df['DATE'])
 
254
 
255
+ # Add a 'MONTH' column
256
+ df['MONTH'] = df['DATE'].dt.to_period('M')
257
+
258
+ # Find the month with the most domains
259
+ month_domain_counts = df.groupby('MONTH')['DOMAINE'].nunique()
260
+ month_with_most_domains = month_domain_counts.idxmax()
261
+
262
+ # Find the dominant domain for that month
263
+ dominant_domain = df[df['MONTH'] == month_with_most_domains]['DOMAINE'].value_counts().idxmax()
264
+
265
+ # Group data by domain
266
+ domain_analyses = ""
267
+ for domain, group in df.groupby('DOMAINE'):
268
+ domain_summary = group.groupby('STATUT').size().to_dict()
269
+ domain_analysis = f"""
270
+ - Domaine "{domain}" :
271
+ - Total des plaintes : {len(group)}
272
+ - Répartition par statut :
273
+ - En cours : {domain_summary.get('EN COURS', 0)}
274
+ - Transférées : {domain_summary.get('TRANSFERE', 0)}
275
+ - Fermées : {domain_summary.get('FERME', 0)}
276
+ - Non pris en charge : {domain_summary.get('NON PRIS EN CHARGE', 0)}
277
+ - Autres statuts : {sum(v for k, v in domain_summary.items() if k not in ['EN COURS', 'TRANSFERE', 'FERME', 'NON PRIS EN CHARGE'])}
278
+ """
279
+ domain_analyses += domain_analysis
280
 
281
  # Define the global analysis prompt
282
  prompt_global = """
283
  Analyse globale des plaintes pour tous les domaines :
284
 
285
  **Résumé général :**
286
+ - Total des plaintes : {total_plaintes}
287
+ - Mois avec le plus de domaines concernés : {month_most_domains}
288
+ - Domaine dominant pour ce mois : {dominant_domain}
289
 
 
 
290
  **Répartition des plaintes par domaine :**
 
291
  {domain_analyses}
292
 
293
+ **Analyse temporelle :**
294
+ - Évolution mensuelle du nombre de plaintes : [À compléter]
295
+ - Pic de plaintes : compléter]
296
+ - Creux de plaintes : [À compléter]
297
 
298
+ **Problèmes récurrents observés dans tous les domaines :**
299
+ - lister 1 à 2 problèmes les plus fréquents
300
 
301
  **Actions entreprises :**
 
302
  - Action 1 : Description de l'action
303
 
304
  **Recommandations pour améliorer la gestion des plaintes :**
 
305
  1. **[Recommandation 1]** : Détails
306
 
307
+ **Analyse du domaine dominant :**
308
+ - Raisons possibles de la prédominance : [À compléter]
309
+ - Comparaison avec les autres mois : [À compléter]
310
 
311
+ En résumé, voici les principales tendances, le mois critique ({month_most_domains}), le domaine dominant pour ce mois ({dominant_domain}), et les recommandations pour améliorer la gestion des plaintes et résoudre les problèmes identifiés à travers tous les domaines.
312
 
313
  ---
314
+
315
+ Utilisez ces informations pour améliorer la qualité du service, optimiser la gestion des plaintes, et porter une attention particulière au domaine dominant identifié pour le mois critique.
316
  """
317
 
318
+ # Format the prompt with the analyzed data
319
+ formatted_prompt = prompt_global.format(
320
+ total_plaintes=len(df),
321
+ month_most_domains=month_with_most_domains,
322
+ dominant_domain=dominant_domain,
323
+ domain_analyses=domain_analyses
324
+ )
 
 
 
 
 
 
 
 
325
 
326
+ # Create the request for the API
327
  try:
328
  completion = client.chat.completions.create(
329
+ model="meta/llama-3.1-8b-instruct",
330
+ messages=[{"role": "user", "content": formatted_prompt}],
331
  temperature=0.2,
332
  top_p=0.9,
333
  stream=True