update
Browse files
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=
|
250 |
|
251 |
-
#
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
return {"error": f"Error converting DataFrame to string: {str(e)}"}
|
256 |
|
257 |
-
#
|
258 |
-
|
259 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
**
|
274 |
-
|
275 |
-
-
|
|
|
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
|
292 |
"""
|
293 |
|
294 |
-
#
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
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":
|
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
|