gdleds commited on
Commit
bb3f74f
·
1 Parent(s): f14c83b

modif app pour recéuperer dernier version du modele

Browse files
Files changed (1) hide show
  1. app.py +45 -8
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
- 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
  # === 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=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}")
 
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}")