modif app pour recéuperer dernier version du modele
Browse files
app.py
CHANGED
|
@@ -88,21 +88,58 @@ 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 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
|
| 98 |
# === Chargement du modèle depuis S3 au démarrage ===
|
| 99 |
-
model = None
|
| 100 |
|
| 101 |
@app.on_event("startup")
|
| 102 |
def load_model():
|
| 103 |
global model
|
| 104 |
try:
|
| 105 |
-
latest_model_key=
|
| 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}")
|
|
|
|
| 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é dans s3://{bucket}/{prefix}")
|
| 95 |
+
# latest = max(response["content"], key=lambda x: x["LastModified"])
|
| 96 |
+
# return latest["Key"]
|
| 97 |
+
|
| 98 |
+
def get_latest_model_key():
|
| 99 |
+
"""
|
| 100 |
+
Récupère automatiquement le dernier fichier modèle dans S3.
|
| 101 |
+
"""
|
| 102 |
+
try:
|
| 103 |
+
# Liste tous les objets sous le préfixe
|
| 104 |
+
response = s3.list_objects_v2(
|
| 105 |
+
Bucket=S3_BUCKET,
|
| 106 |
+
Prefix=S3_PREFIX
|
| 107 |
+
)
|
| 108 |
+
|
| 109 |
+
if "Contents" not in response:
|
| 110 |
+
raise ValueError("Aucun modèle trouvé dans le bucket S3.")
|
| 111 |
+
|
| 112 |
+
# Filtrer uniquement les .joblib
|
| 113 |
+
models = [
|
| 114 |
+
obj for obj in response["Contents"]
|
| 115 |
+
if obj["Key"].endswith(".joblib")
|
| 116 |
+
]
|
| 117 |
+
|
| 118 |
+
if not models:
|
| 119 |
+
raise ValueError("Aucun fichier .joblib trouvé.")
|
| 120 |
+
|
| 121 |
+
# Trier par LastModified (date d'upload dans S3)
|
| 122 |
+
models.sort(key=lambda x: x["LastModified"], reverse=True)
|
| 123 |
+
|
| 124 |
+
latest_key = models[0]["Key"]
|
| 125 |
+
print(f"📌 Dernier modèle détecté : {latest_key}")
|
| 126 |
+
return latest_key
|
| 127 |
+
|
| 128 |
+
except Exception as e:
|
| 129 |
+
raise RuntimeError(f"Erreur récupération modèle S3 : {e}")
|
| 130 |
+
|
| 131 |
+
|
| 132 |
+
# === Chargement automatique du dernier modèle ===
|
| 133 |
+
|
| 134 |
|
| 135 |
# === Chargement du modèle depuis S3 au démarrage ===
|
| 136 |
+
# model = None
|
| 137 |
|
| 138 |
@app.on_event("startup")
|
| 139 |
def load_model():
|
| 140 |
global model
|
| 141 |
try:
|
| 142 |
+
latest_model_key = get_latest_model_key()
|
| 143 |
print(f"Téléchargement du dernier modèle depuis s3://{S3_BUCKET}/{latest_model_key}")
|
| 144 |
|
| 145 |
# print(f"Téléchargement du modèle depuis s3://{S3_BUCKET}/{MODEL_KEY}")
|