price / app.py
ericjedha's picture
9e push
e086573
import mlflow
import uvicorn
import pandas as pd
from pydantic import BaseModel
from typing import Literal, List, Union
from fastapi import FastAPI, File, UploadFile, HTTPException
import joblib
import traceback
import logging
import os
# Création de l'application FastAPI
app = FastAPI()
# MLFLOW URI
# Set your variables for your environment
#EXPERIMENT_NAME="hyperparameter_tuning"
# Set tracking URI to your Hugging Face application
#mlflow.set_tracking_uri(os.environ["APP_URI"])
# Set experiment's info
#mlflow.set_experiment(EXPERIMENT_NAME)
# Get our experiment info
#experiment = mlflow.get_experiment_by_name(EXPERIMENT_NAME)
# Exemple de données
df = pd.DataFrame({
"MedInc": [8.3252],
"HouseAge": [41.0],
"AveRooms": [6.984126984126984],
"AveBedrms": [1.0238095238095237],
"Population": [322.0],
"AveOccup": [2.5555555555555554],
"Latitude": [37.88],
"Longitude": [-122.23],
})
class PredictionFeatures(BaseModel):
MedInc: float
HouseAge: float
AveRooms: float
AveBedrms: float
Population: float
AveOccup: float
Latitude: float
Longitude: float
@app.get("/")
async def root():
logging.debug("Request")
return {"message": "L'application FastAPI est déployée avec succès !"}
@app.post("/predict", tags=["Machine Learning"])
async def predict(predictionFeatures: PredictionFeatures):
"""
Prédiction du prix d'une maison.
"""
try:
# Préparer les caractéristiques d'entrée pour la prédiction
caracts = pd.DataFrame({"MedInc": [predictionFeatures.MedInc],
"HouseAge": [predictionFeatures.HouseAge],
"AveRooms": [predictionFeatures.AveRooms],
"AveBedrms": [predictionFeatures.AveBedrms],
"Population": [predictionFeatures.Population],
"AveOccup": [predictionFeatures.AveOccup],
"Latitude": [predictionFeatures.Latitude],
"Longitude": [predictionFeatures.Longitude],
})
# Charger le modèle depuis mlflow
logged_model = 'runs:/0abb54594cf24179b220ff2e5acff9d7/best_estimator' # Remplace par ton propre run ID
loaded_model = mlflow.pyfunc.load_model(logged_model)
# Faire la prédiction
prediction_price = loaded_model.predict(caracts)
# Formater la réponse
response = {"prediction": prediction_price.tolist()[0]}
return response
except Exception as e:
# Afficher l'erreur complète dans les logs
error_message = str(e) + "\n" + traceback.format_exc()
raise HTTPException(status_code=500, detail=error_message)
print("Le model est là !")