Spaces:
Sleeping
Sleeping
| # from fastapi import FastAPI, HTTPException | |
| # from pydantic import BaseModel | |
| # import joblib | |
| # import numpy as np | |
| # app = FastAPI() | |
| # model = joblib.load("RF_InFlight.joblib") | |
| # le_airports = joblib.load("le_airports.joblib") | |
| # class FlightInput(BaseModel): | |
| # Year: int | |
| # Quarter: int | |
| # Month: int | |
| # DayofMonth: int | |
| # Origin: str | |
| # Dest: str | |
| # DepTime: float | |
| # DepDelayMinutes: float | |
| # DepDel15: int | |
| # CRSDepTime: float | |
| # tempF: float | |
| # WindChillF: float | |
| # humidity: float | |
| # windspeedKmph: float | |
| # WindGustKmph: float | |
| # winddirDegree: float | |
| # weatherCode: float | |
| # visibility: float | |
| # pressure: float | |
| # cloudcover: float | |
| # DewPointF: float | |
| # time: int | |
| # @app.post("/predict") | |
| # def predict(data: FlightInput): | |
| # try: | |
| # origin_encoded = int(le_airports.transform([data.Origin])[0]) | |
| # except ValueError: | |
| # raise HTTPException( | |
| # status_code=422, | |
| # detail=f"Origin '{data.Origin}' غير موجود. المطارات المتاحة: {le_airports.classes_.tolist()}" | |
| # ) | |
| # try: | |
| # dest_encoded = int(le_airports.transform([data.Dest])[0]) | |
| # except ValueError: | |
| # raise HTTPException( | |
| # status_code=422, | |
| # detail=f"Dest '{data.Dest}' غير موجود. المطارات المتاحة: {le_airports.classes_.tolist()}" | |
| # ) | |
| # features = np.array([[ | |
| # data.Year, data.Quarter, data.Month, data.DayofMonth, | |
| # origin_encoded, dest_encoded, | |
| # data.DepTime, data.DepDelayMinutes, data.DepDel15, | |
| # data.CRSDepTime, data.tempF, data.WindChillF, | |
| # data.humidity, data.windspeedKmph, data.WindGustKmph, | |
| # data.winddirDegree, data.weatherCode, data.visibility, | |
| # data.pressure, data.cloudcover, data.DewPointF, data.time | |
| # ]]) | |
| # prediction = model.predict(features)[0] | |
| # return { | |
| # "predicted_delay_minutes": round(float(prediction), 2) | |
| # } | |
| # @app.get("/airports") | |
| # def get_airports(): | |
| # airports = le_airports.classes_.tolist() | |
| # return {"airports": airports} | |
| # @app.get("/health") | |
| # def health(): | |
| # return {"status": "ok"} | |
| from fastapi import FastAPI, HTTPException | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from pydantic import BaseModel | |
| import joblib | |
| import numpy as np | |
| app = FastAPI() | |
| # إعدادات الـ CORS للسماح للواجهات الأمامية بالاتصال بالـ API | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # يسمح باستقبال الطلبات من أي مكان. يمكنك تغييرها لرابط موقعك لاحقاً للحماية. | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # تحميل الموديل ومشفر البيانات مرة واحدة عند تشغيل السيرفر | |
| model = joblib.load("RF_InFlight_compressed.joblib") | |
| le_airports = joblib.load("le_airports.joblib") | |
| class FlightInput(BaseModel): | |
| Year: int | |
| Quarter: int | |
| Month: int | |
| DayofMonth: int | |
| Origin: str | |
| Dest: str | |
| DepTime: float | |
| DepDelayMinutes: float | |
| DepDel15: int | |
| CRSDepTime: float | |
| tempF: float | |
| WindChillF: float | |
| humidity: float | |
| windspeedKmph: float | |
| WindGustKmph: float | |
| winddirDegree: float | |
| weatherCode: float | |
| visibility: float | |
| pressure: float | |
| cloudcover: float | |
| DewPointF: float | |
| time: int | |
| # مسار ترحيبي للـ Hugging Face Space | |
| def read_root(): | |
| return { | |
| "message": "Flight Delay Prediction API is running perfectly! ✈️", | |
| "health_check": "/health", | |
| "airports_list": "/airports", | |
| "prediction_endpoint": "/predict" | |
| } | |
| def predict(data: FlightInput): | |
| try: | |
| origin_encoded = int(le_airports.transform([data.Origin])[0]) | |
| except ValueError: | |
| raise HTTPException( | |
| status_code=422, | |
| detail=f"Origin '{data.Origin}' غير موجود. المطارات المتاحة: {le_airports.classes_.tolist()}" | |
| ) | |
| try: | |
| dest_encoded = int(le_airports.transform([data.Dest])[0]) | |
| except ValueError: | |
| raise HTTPException( | |
| status_code=422, | |
| detail=f"Dest '{data.Dest}' غير موجود. المطارات المتاحة: {le_airports.classes_.tolist()}" | |
| ) | |
| features = np.array([[ | |
| data.Year, data.Quarter, data.Month, data.DayofMonth, | |
| origin_encoded, dest_encoded, | |
| data.DepTime, data.DepDelayMinutes, data.DepDel15, | |
| data.CRSDepTime, data.tempF, data.WindChillF, | |
| data.humidity, data.windspeedKmph, data.WindGustKmph, | |
| data.winddirDegree, data.weatherCode, data.visibility, | |
| data.pressure, data.cloudcover, data.DewPointF, data.time | |
| ]]) | |
| prediction = model.predict(features)[0] | |
| return { | |
| "predicted_delay_minutes": round(float(prediction), 2) | |
| } | |
| def get_airports(): | |
| airports = le_airports.classes_.tolist() | |
| return {"airports": airports} | |
| def health(): | |
| return {"status": "ok"} |