bambadij commited on
Commit
f87b7e0
·
verified ·
1 Parent(s): ce14cca
Files changed (1) hide show
  1. app.py +100 -0
app.py CHANGED
@@ -232,6 +232,106 @@ async def generate_text(
232
  generated_text += chunk.choices[0].delta.content
233
 
234
  return {"summary_text_2": generated_text}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  if __name__ == "__main__":
236
  uvicorn.run("app:app",reload=True)
237
 
 
232
  generated_text += chunk.choices[0].delta.content
233
 
234
  return {"summary_text_2": generated_text}
235
+ @app.post("/analyse_globale/")
236
+ async def generate_global_analysis(file: UploadFile = File(...)):
237
+ # Check file size
238
+ contents = await file.read()
239
+ file_size = len(contents)
240
+
241
+ if file_size > 5_000_000: # 5MB limit
242
+ return {"error": "File size exceeds the 5MB limit. The file will be sampled."}
243
+
244
+ # Read the uploaded CSV file
245
+ try:
246
+ df = pd.read_csv(io.StringIO(contents.decode('utf-8')))
247
+ except Exception as e:
248
+ return {"error": f"Error reading CSV file: {str(e)}"}
249
+
250
+ # Sample the data if it's too large
251
+ if len(df) > 1000: # Adjust this number based on your needs
252
+ df = df.sample(n=100, random_state=42)
253
+
254
+ # Convert the DataFrame to a string
255
+ try:
256
+ text_to_generate = df.to_string(index=False)
257
+ except Exception as e:
258
+ return {"error": f"Error converting DataFrame to string: {str(e)}"}
259
+
260
+ # Ensure the generated text is within size limits
261
+ if len(text_to_generate.encode('utf-8')) > 5_000_000:
262
+ return {"error": "Generated text exceeds size limit even after sampling. Please reduce the data further."}
263
+
264
+ # Define the global analysis prompt
265
+ prompt_global = """
266
+ Analyse globale des plaintes pour tous les domaines :
267
+
268
+ **Résumé général :**
269
+
270
+ - Total des plaintes : [Nombre total de plaintes]
271
+
272
+ **Répartition des plaintes par domaine :**
273
+
274
+ {domain_analyses}
275
+
276
+ **Problèmes récurrents observés dans tous les domaines :**
277
+
278
+ - Problème 1 : Description et fréquence
279
+ - Problème 2 : Description et fréquence
280
+ - Problème 3 : Description et fréquence
281
+
282
+ **Actions entreprises :**
283
+
284
+ - Action 1 : Description de l'action
285
+ - Action 2 : Description de l'action
286
+ - Action 3 : Description de l'action
287
+
288
+ **Recommandations pour améliorer la gestion des plaintes :**
289
+
290
+ 1. **[Recommandation 1]** : Détails
291
+ 2. **[Recommandation 2]** : Détails
292
+ 3. **[Recommandation 3]** : Détails
293
+
294
+ 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.
295
+
296
+ ---
297
+
298
+ Utilisez ces informations pour améliorer la qualité du service et optimiser la gestion des plaintes.
299
+ """
300
+
301
+ # Group data by domain
302
+ domain_analyses = ""
303
+ for domain, group in df.groupby('DOMAINE'):
304
+ domain_summary = group.groupby('STATUT').size().to_dict()
305
+ domain_analysis = f"""
306
+ - Domaine "{domain}" :
307
+ - Total des plaintes : {len(group)}
308
+ - Répartition par statut :
309
+ - En cours : {domain_summary.get('EN COURS', 0)}
310
+ - Transférées : {domain_summary.get('TRANSFERE', 0)}
311
+ - Fermées : {domain_summary.get('FERME', 0)}
312
+ - Non pris en charge : {domain_summary.get('NON PRIS EN CHARGE', 0)}
313
+ - Autres statuts : {sum(v for k, v in domain_summary.items() if k not in ['EN COURS', 'TRANSFERE', 'FERME', 'NON PRIS EN CHARGE'])}
314
+ """
315
+ domain_analyses += domain_analysis
316
+
317
+ # Create the request for the API
318
+ try:
319
+ completion = client.chat.completions.create(
320
+ model="meta/llama-3.1-8b-instruct",
321
+ messages=[{"role": "user", "content": prompt_global.format(domain_analyses=domain_analyses) + text_to_generate}],
322
+ temperature=0.2,
323
+ top_p=0.9,
324
+ stream=True
325
+ )
326
+ except Exception as e:
327
+ return {"error": f"Error generating text: {str(e)}"}
328
+
329
+ generated_text = ""
330
+ for chunk in completion:
331
+ if chunk.choices[0].delta.content is not None:
332
+ generated_text += chunk.choices[0].delta.content
333
+
334
+ return {"global_analysis_text": generated_text}
335
  if __name__ == "__main__":
336
  uvicorn.run("app:app",reload=True)
337