modif app pour recéuperer dernier version du modele
Browse files
app.py
CHANGED
|
@@ -86,7 +86,14 @@ class InputData(BaseModel):
|
|
| 86 |
# === Configuration S3 ===
|
| 87 |
S3_BUCKET = os.getenv("S3_BUCKET")
|
| 88 |
MODEL_KEY = os.getenv("MODEL_KEY")
|
|
|
|
| 89 |
s3 = boto3.client("s3")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
|
| 91 |
# === Chargement du modèle depuis S3 au démarrage ===
|
| 92 |
model = None
|
|
@@ -95,8 +102,11 @@ model = None
|
|
| 95 |
def load_model():
|
| 96 |
global model
|
| 97 |
try:
|
| 98 |
-
|
| 99 |
-
|
|
|
|
|
|
|
|
|
|
| 100 |
model_bytes = io.BytesIO(response["Body"].read())
|
| 101 |
model = joblib.load(model_bytes)
|
| 102 |
print("✅ Modèle chargé avec succès")
|
|
@@ -115,7 +125,7 @@ def predict(data: InputData):
|
|
| 115 |
# Convertir les données en DataFrame avec colonnes correctes
|
| 116 |
df = pd.DataFrame([data.dict()])
|
| 117 |
print("📥 Données reçues :", df.head(1).to_dict())
|
| 118 |
-
|
| 119 |
# Faire la prédiction
|
| 120 |
prediction = model.predict(df)
|
| 121 |
is_fraud = int(prediction[0])
|
|
|
|
| 86 |
# === Configuration S3 ===
|
| 87 |
S3_BUCKET = os.getenv("S3_BUCKET")
|
| 88 |
MODEL_KEY = os.getenv("MODEL_KEY")
|
| 89 |
+
S3_PREFIX = "mlflow/models"
|
| 90 |
s3 = boto3.client("s3")
|
| 91 |
+
def latest_model(bucket:str, prefix: str):
|
| 92 |
+
response = s3.list_objects_V2(Bucket=bucket, Prefix=prefix)
|
| 93 |
+
if "content" not in response:
|
| 94 |
+
raise FileNotFoundError(f"Aucun modèle trouvé")
|
| 95 |
+
latest = max(response["content"]), key=lambda x: x["Last Modified"]
|
| 96 |
+
return latest["key"]
|
| 97 |
|
| 98 |
# === Chargement du modèle depuis S3 au démarrage ===
|
| 99 |
model = None
|
|
|
|
| 102 |
def load_model():
|
| 103 |
global model
|
| 104 |
try:
|
| 105 |
+
latest_model_key=latest_model(S3_BUCKET,S3_PREFIX)
|
| 106 |
+
print(f"Téléchargement du dernier modèle depuis s3://{S3_BUCKET}/{latest_model_key}")
|
| 107 |
+
|
| 108 |
+
# print(f"Téléchargement du modèle depuis s3://{S3_BUCKET}/{MODEL_KEY}")
|
| 109 |
+
response = s3.get_object(Bucket=S3_BUCKET, Key=latest_model_key)
|
| 110 |
model_bytes = io.BytesIO(response["Body"].read())
|
| 111 |
model = joblib.load(model_bytes)
|
| 112 |
print("✅ Modèle chargé avec succès")
|
|
|
|
| 125 |
# Convertir les données en DataFrame avec colonnes correctes
|
| 126 |
df = pd.DataFrame([data.dict()])
|
| 127 |
print("📥 Données reçues :", df.head(1).to_dict())
|
| 128 |
+
print(f"Téléchargement du dernier modèle depuis s3://{S3_BUCKET}/{latest_model_key}")
|
| 129 |
# Faire la prédiction
|
| 130 |
prediction = model.predict(df)
|
| 131 |
is_fraud = int(prediction[0])
|