from flask import Flask, request, jsonify import pandas as pd import joblib import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) app = Flask(__name__) try: model = joblib.load('model.joblib') columns = joblib.load('columns.joblib') logger.info("Model and columns loaded successfully in hosting script.") except Exception as e: logger.error(f"Failed to load model or columns: {e}") raise @app.route('/', methods=['GET']) def index(): logger.info("Root endpoint called.") return jsonify({'status': 'ok'}) @app.route('/health', methods=['GET']) def health(): logger.info("Health check endpoint called.") return jsonify({'status': 'healthy'}) @app.route('/predict', methods=['POST']) def predict(): try: logger.info("Predict endpoint called with data: %s", request.get_json(force=True)) data = request.get_json(force=True) input_df = pd.DataFrame(data) categorical_columns = ['Occupation', 'Gender', 'ProductPitched', 'MaritalStatus', 'Designation'] input_encoded = pd.get_dummies(input_df, columns=categorical_columns, drop_first=True) input_encoded = input_encoded.reindex(columns=columns, fill_value=0) prediction = model.predict(input_encoded) logger.info("Prediction made: %s", prediction.tolist()) return jsonify({'prediction': prediction.tolist()}) except Exception as e: logger.error(f"Prediction failed: %s", str(e)) return jsonify({'error': str(e)}), 400 # Do not call app.run(); waitress will serve it via Docker CMD