Added 5 minutes error_report condition
This commit is contained in:
parent
70360c7099
commit
5ad86f2bf5
1 changed files with 49 additions and 12 deletions
|
|
@ -8,6 +8,8 @@ import mlflow
|
||||||
from mlflow.tracking import MlflowClient
|
from mlflow.tracking import MlflowClient
|
||||||
from tensorflow.keras.models import load_model
|
from tensorflow.keras.models import load_model
|
||||||
from tensorflow.keras.preprocessing.sequence import pad_sequences
|
from tensorflow.keras.preprocessing.sequence import pad_sequences
|
||||||
|
import pandas as pd
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
# A DECOMMENTER POUR DEVELOPPER. AUTREMENT, LAISSER AINSI
|
# A DECOMMENTER POUR DEVELOPPER. AUTREMENT, LAISSER AINSI
|
||||||
# Accéder à .env
|
# Accéder à .env
|
||||||
|
|
@ -142,8 +144,13 @@ def predict_sentiment(request: TweetRequest):
|
||||||
"probability": float(prediction_prob)
|
"probability": float(prediction_prob)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Remplacer le dict par un DataFrame global initial vide
|
||||||
|
error_reports_df = pd.DataFrame(columns=["tweet", "prediction", "probability", "timestamp"])
|
||||||
|
|
||||||
@app.post("/report_error")
|
@app.post("/report_error")
|
||||||
def report_error(request: ReportRequest):
|
def report_error(request: ReportRequest):
|
||||||
|
global error_reports_df
|
||||||
|
|
||||||
tweet = request.tweet.strip()
|
tweet = request.tweet.strip()
|
||||||
prediction = request.prediction.strip().lower()
|
prediction = request.prediction.strip().lower()
|
||||||
probability = request.probability
|
probability = request.probability
|
||||||
|
|
@ -153,23 +160,53 @@ def report_error(request: ReportRequest):
|
||||||
if probability < 0 or probability > 1:
|
if probability < 0 or probability > 1:
|
||||||
raise HTTPException(status_code=400, detail="Probabilité invalide. Elle doit être entre 0 et 1.")
|
raise HTTPException(status_code=400, detail="Probabilité invalide. Elle doit être entre 0 et 1.")
|
||||||
|
|
||||||
# Ajouter ou mettre à jour le signalement du tweet avec la probabilité
|
now = datetime.utcnow()
|
||||||
error_reports[tweet] = prediction + f' (p = {probability:.2f} ) '
|
|
||||||
|
# Vérifier si le tweet existe déjà pour éviter doublons
|
||||||
|
existing_idx = error_reports_df.index[error_reports_df["tweet"] == tweet].tolist()
|
||||||
|
if existing_idx:
|
||||||
|
# Mettre à jour la ligne existante
|
||||||
|
idx = existing_idx[0]
|
||||||
|
error_reports_df.at[idx, "prediction"] = prediction + f' (p = {probability:.2f} ) '
|
||||||
|
error_reports_df.at[idx, "probability"] = probability
|
||||||
|
error_reports_df.at[idx, "timestamp"] = now
|
||||||
|
else:
|
||||||
|
# Ajouter une nouvelle ligne
|
||||||
|
new_row = {
|
||||||
|
"tweet": tweet,
|
||||||
|
"prediction": prediction + f' (p = {probability:.2f} ) ',
|
||||||
|
"probability": probability,
|
||||||
|
"timestamp": now
|
||||||
|
}
|
||||||
|
error_reports_df = pd.concat([error_reports_df, pd.DataFrame([new_row])], ignore_index=True)
|
||||||
|
|
||||||
report_sent = False
|
report_sent = False
|
||||||
|
|
||||||
# Condition : À chaque multiple de 3 signalements, un mail est envoyé
|
# Condition : multiples de 3 signalements et délai max 5 minutes entre les 3 derniers
|
||||||
try:
|
try:
|
||||||
if len(error_reports) % 3 == 0: # La condition reste
|
if len(error_reports_df) % 3 == 0:
|
||||||
report_sent = True
|
last_three = error_reports_df.sort_values("timestamp", ascending=False).head(3)
|
||||||
print(f"📧 Tentative d'envoi d'email pour {len(error_reports)} signalements...")
|
times = last_three["timestamp"].sort_values()
|
||||||
email_success = send_error_report_email(error_reports.copy())
|
delta = times.iloc[-1] - times.iloc[0]
|
||||||
|
if delta <= timedelta(minutes=5):
|
||||||
|
reports_dict = dict(zip(
|
||||||
|
last_three["tweet"],
|
||||||
|
last_three["prediction"]
|
||||||
|
))
|
||||||
|
print(f"📧 Tentative d'envoi d'email pour {len(error_reports_df)} signalements...")
|
||||||
|
email_success = send_error_report_email(reports_dict)
|
||||||
if email_success:
|
if email_success:
|
||||||
print(f"✅ Email envoyé avec succès pour {len(error_reports)} signalements")
|
print(f"✅ Email envoyé avec succès pour {len(error_reports_df)} signalements")
|
||||||
|
report_sent = True
|
||||||
|
# SUPPRESSION des 3 derniers signalements envoyés
|
||||||
|
# Identifier les index à supprimer
|
||||||
|
to_remove_idx = last_three.index
|
||||||
|
error_reports_df = error_reports_df.drop(to_remove_idx).reset_index(drop=True)
|
||||||
else:
|
else:
|
||||||
print(f"❌ Échec de l'envoi de l'email pour {len(error_reports)} signalements")
|
print(f"❌ Échec de l'envoi de l'email pour {len(error_reports_df)} signalements")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ Erreur lors de l'envoi de l'email : {e}")
|
print(f"❌ Erreur lors de l'envoi de l'email : {e}")
|
||||||
# On continue même si l'email échoue pour ne pas bloquer l'API
|
# Continuer même si échec
|
||||||
|
|
||||||
return {"report_sent": report_sent}
|
return {"report_sent": report_sent}
|
||||||
Loading…
Add table
Reference in a new issue