PatRzR/GAA_API
0
1 2#3# Import necessary libraries4 5import mlflow 6import uvicorn7import pandas as pd 8 9from pydantic import BaseModel, Field10from typing import Literal, List, Union11from fastapi import FastAPI, File, UploadFile12import joblib13 14# Description of the API15 16description = """ API pour ML model prediction de prix de location"""17 18# Metadata for the API documentation19 20tags_metadata = [21 {22 "name": "Machine Learning",23 "description": "post 13 features to /predict!",24 },25 26]27 28# Create the FastAPI app29app = FastAPI(30 title="getaround_Price_prediction",31 description=description,32 version="0.1",33 contact={34 "name": "PRzR",35 "url": "https://GitHub.com/PRzR",36 },37 openapi_tags=tags_metadata38)39 40# Defnition des classes pour les modèles de données (pour valider les entrées)41 42class PredictionFeatures(BaseModel):43 mileage: float = Field(..., description="Kilométrage du véhicule en km", example=45000)44 engine_power: float = Field(..., description="Puissance moteur en chevaux", example=110)45 model_key: str = Field(..., description="Modèle du véhicule", example="Clio")46 fuel: str = Field(..., description="Type de carburant", example="diesel")47 paint_color: str = Field(..., description="Couleur de la peinture", example="black")48 car_type: str = Field(..., description="Type de véhicule", example="sedan")49 private_parking_available: bool = Field(..., description="Parking privé disponible", example=True)50 has_gps: bool = Field(..., description="Véhicule avec GPS", example=True)51 has_air_conditioning: bool = Field(..., description="Climatisation", example=True)52 automatic_car: bool = Field(..., description="Boîte automatique", example=False)53 has_getaround_connect: bool = Field(..., description="Équipé de Getaround Connect", example=True)54 has_speed_regulator: bool = Field(..., description="Régulateur de vitesse", example=True)55 winter_tires: bool = Field(..., description="Pneus hiver", example=False)56 57 has_speed_regulator: bool = Field(..., description="Régulateur de vitesse", example=True)58 winter_tires: bool = Field(..., description="Pneus hiver", example=False)59 60 61#mlflow.set_tracking_uri("https://patrzr-mlflow-server-demo.hf.space/")62 63# Load model from MLflow64#logged_model = 'runs:/ed35d773308245a395ce888e362069b5/RF_200_CV5'65loaded_model = mlflow.pyfunc.load_model("./model")66 67 68 69# Definition des endpoints pour l'API70 71 72@app.post("/predict", tags=["Machine Learning"])73async def predict(predictionFeatures: PredictionFeatures):74 """ Endpoint pour prédire le prix de location d'un véhicule. 75 Args:76 77 mileage: Kilométrage du véhicule en km, example=4500078 engine_power: Puissance moteur en chevaux, example=11079 model_key: Modèle du véhicule, example="Clio80 fuel: Type de carburant, example="diesel"81 paint_color: Couleur de la peinture, example="black"82 car_type: Type de véhicule, example="sedan"83 private_parking_available: Parking privé disponible, example=True84 has_gps: Véhicule avec GPS, example=True85 has_air_conditioning: Climatisation, example=True86 automatic_car: bool = Boîte automatique, example=False87 has_getaround_connect: "Équipé de Getaround Connect", example=True88 has_speed_regulator: Régulateur de vitesse", example=True89 winter_tires: bool = Field(..., description="Pneus hiver", example=False90 has_speed_regulator: "Régulateur de vitesse", example=True91 winter_tires: Pneus hiver, example=False92 Returns:93 dict: Dictionnaire contenant la prédiction du prix de location.94 95 """96 # Read data (convert input to DataFrame)97 df = pd.DataFrame(dict(predictionFeatures), index=[0]) 98 99 # Predict on a Pandas DataFrame.100 prediction = loaded_model.predict(df)101 102 # Format response103 response = {"prediction Price": prediction.tolist()[0]}104 105 return response106 107 