# app.py from fastapi import FastAPI from pydantic import BaseModel from typing import Literal import numpy as np import joblib # Load all components model = joblib.load("model_GBR_custom.pkl") scaler = joblib.load("scaler.pkl") encoders = joblib.load("encoders.pkl") app = FastAPI() # Define input schema class CropInput(BaseModel): crop: str season: str ndvi: float lst: float windspeed: float temperature: float total_rainfall: float relative_humidity: float rsm: float N: float P: float K: float @app.post("/predict") def predict(data: CropInput): # Extract fields x = [ data.crop, data.season, data.ndvi, data.lst, data.windspeed, data.temperature, data.total_rainfall, data.relative_humidity, data.rsm, data.N, data.P, data.K ] # Apply encoders (assuming encoders is a dict with keys 'crop' and 'season') x[0] = encoders["crop"].transform([x[0]])[0] x[1] = encoders["season"].transform([x[1]])[0] # Convert to array and scale x_arr = np.array(x).reshape(1, -1) x_scaled = scaler.transform(x_arr) # Predict prediction = model.predict(x_scaled)[0] return {"prediction": prediction} # To run locally: # uvicorn app:app --reload