setuagrawal's picture
Upload folder using huggingface_hub
c2e6df2 verified
import joblib
import pandas as pd
from flask import Flask, request, jsonify
import sys
# Re-define the same functions used inside the pipeline
def add_store_age(df):
df = df.copy()
df['Store_Age'] = 2025 - df['Store_Established_Year']
df = df.drop(columns=['Store_Established_Year'])
return df
def map_ordered_features(X):
sugar_order_map = {'No Sugar': 0, 'Low Sugar': 1, 'Regular': 2}
size_order_map = {'Small': 0, 'Medium': 1, 'High': 2}
city_order_map = {'Tier 3': 0, 'Tier 2': 1, 'Tier 1': 2}
X = X.copy()
X['Product_Sugar_Content'] = X['Product_Sugar_Content'].map(sugar_order_map).astype(int)
X['Store_Size'] = X['Store_Size'].map(size_order_map).astype(int)
X['Store_Location_City_Type'] = X['Store_Location_City_Type'].map(city_order_map).astype(int)
return X
# Inject functions into the module namespace where joblib expects them
if __name__ != '__main__':
# When running in production (Hugging Face), inject into __main__
import __main__
__main__.add_store_age = add_store_age
__main__.map_ordered_features = map_ordered_features
# Initialize Flask app with a name
sales_predictor_api = Flask("SuperKart Sales Predictor")
# Load the trained SuperKart Sales prediction model
model = joblib.load("superkart_sales_model.pkl")
# Define a route for the home page
@sales_predictor_api.get('/')
def home():
return "Welcome to the SuperKart Sales Prediction API!"
# Define an endpoint to predict churn for a single customer
@sales_predictor_api.post('/v1/productsales')
def predict_sales():
try:
# Get JSON data
sales_data = request.get_json()
# Ensure input is a list of records
if isinstance(sales_data, dict):
sales_data = [sales_data]
# Convert to DataFrame
input_data = pd.DataFrame(sales_data)
# Add Store_Id if not present (model expects it but doesn't use it)
if 'Store_Id' not in input_data.columns:
input_data['Store_Id'] = 'DUMMY_STORE'
# Predict
prediction = model.predict(input_data).tolist()[0]
return jsonify({"prediction": float(prediction)})
except Exception as e:
return jsonify({"error": str(e)})
# Run the Flask app in debug mode
if __name__ == '__main__':
sales_predictor_api.run(debug=True)