gdleds commited on
Commit
71c1dfa
·
1 Parent(s): 2de7a63

modif app.py dans load

Browse files
Files changed (1) hide show
  1. app.py +10 -36
app.py CHANGED
@@ -85,22 +85,11 @@ class InputData(BaseModel):
85
 
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é 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
@@ -122,27 +111,13 @@ def get_latest_model_key():
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
- @app.get("/version")
138
- def version():
139
- import sklearn
140
- import sys
141
- return {
142
- "python": sys.version,
143
- "sklearn": sklearn.__version__
144
- }
145
-
146
  @app.on_event("startup")
147
  def load_model():
148
  global model
@@ -154,32 +129,31 @@ def load_model():
154
  response = s3.get_object(Bucket=S3_BUCKET, Key=latest_model_key)
155
  model_bytes = io.BytesIO(response["Body"].read())
156
  model = joblib.load(model_bytes)
157
- print("Modèle chargé avec succès")
158
  except Exception as e:
159
- print(f"Erreur chargement modèle : {e}")
160
  raise RuntimeError(f"Impossible de charger le modèle : {e}")
161
 
162
  # === Routes ===
163
- # @app.get("/")
164
- # def home():
165
- # return {"message": "Bienvenue sur l'API Fraude détéction - Utilisez /predict pour faire une prédiction"}
166
 
167
 
168
  @app.post("/predict")
169
  def predict(data: InputData):
170
  try:
171
- # Convertir les données en DataFrame avec colonnes correctes
172
  df = pd.DataFrame([data.dict()])
173
- print("📥 Données reçues :", df.head(1).to_dict())
174
- print(f"Téléchargement du dernier modèle depuis s3://{S3_BUCKET}/{latest_model_key}")
175
- # Faire la prédiction
176
  prediction = model.predict(df)
177
  is_fraud = int(prediction[0])
178
 
179
  return {"is_fraud": is_fraud}
180
 
181
  except Exception as e:
182
- print(f"Erreur prédiction : {e}")
183
  raise HTTPException(status_code=500, detail=str(e))
184
 
185
 
 
85
 
86
  # === Configuration S3 ===
87
  S3_BUCKET = os.getenv("S3_BUCKET")
 
88
  S3_PREFIX = "mlflow/models/"
89
  s3 = boto3.client("s3")
 
 
 
 
 
 
90
 
91
  def get_latest_model_key():
 
 
 
92
  try:
 
93
  response = s3.list_objects_v2(
94
  Bucket=S3_BUCKET,
95
  Prefix=S3_PREFIX
 
111
  models.sort(key=lambda x: x["LastModified"], reverse=True)
112
 
113
  latest_key = models[0]["Key"]
114
+ print(f"Dernier modèle détecté : {latest_key}")
115
  return latest_key
116
 
117
  except Exception as e:
118
  raise RuntimeError(f"Erreur récupération modèle S3 : {e}")
119
 
120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  @app.on_event("startup")
122
  def load_model():
123
  global model
 
129
  response = s3.get_object(Bucket=S3_BUCKET, Key=latest_model_key)
130
  model_bytes = io.BytesIO(response["Body"].read())
131
  model = joblib.load(model_bytes)
132
+ print("Modèle chargé avec succès")
133
  except Exception as e:
134
+ print(f"Erreur chargement modèle : {e}")
135
  raise RuntimeError(f"Impossible de charger le modèle : {e}")
136
 
137
  # === Routes ===
138
+ @app.get("/")
139
+ def home():
140
+ return {"message": "Bienvenue sur l'API Fraude détéction - Utilisez /predict pour faire une prédiction"}
141
 
142
 
143
  @app.post("/predict")
144
  def predict(data: InputData):
145
  try:
146
+
147
  df = pd.DataFrame([data.dict()])
148
+ print("Données reçues :", df.head(1).to_dict())
149
+
 
150
  prediction = model.predict(df)
151
  is_fraud = int(prediction[0])
152
 
153
  return {"is_fraud": is_fraud}
154
 
155
  except Exception as e:
156
+ print(f"Erreur prédiction : {e}")
157
  raise HTTPException(status_code=500, detail=str(e))
158
 
159