IPL_PREDICTOR / app.py
ministerchief's picture
Update app.py
3620488 verified
Raw
History Blame Contribute Delete
2.1 kB
from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
from utils.predictor import CricketPredictor
from utils.encoders import TEAMS, VENUES
import logging
import os
app = Flask(__name__)
CORS(app)
logging.basicConfig(level=logging.INFO)
predictor = CricketPredictor()
# ───────────── ROUTES ─────────────
@app.route("/")
def index():
return render_template("index.html", teams=TEAMS, venues=VENUES)
@app.route("/simulate")
def simulate():
return render_template("simulate.html", teams=TEAMS, venues=VENUES)
@app.route("/model-info")
def model_info():
return render_template("model_info.html")
# ───────────── API ─────────────
@app.route("/api/predict", methods=["POST"])
def api_predict():
try:
data = request.get_json(force=True)
required = [
"batting_team", "bowling_team", "venue",
"innings", "over", "ball_in_over",
"current_score", "wickets_fallen"
]
missing = [f for f in required if f not in data]
if missing:
return jsonify({"error": f"Missing: {', '.join(missing)}"}), 400
# Defaults
data.setdefault("batter_sr", 130)
data.setdefault("bowler_eco", 7.5)
data.setdefault("last_6_runs", 6)
data.setdefault("last_12_runs", 12)
if int(data["innings"]) == 2:
if "balls_remaining" not in data:
return jsonify({"error": "balls_remaining required"}), 400
result = predictor.predict(data)
return jsonify({"success": True, "prediction": result})
except Exception as e:
logging.exception("Prediction error")
return jsonify({"error": str(e)}), 500
@app.route("/api/health")
def health():
return jsonify({"status": "ok"})
# ───────────── RUN ─────────────
if __name__ == "__main__":
port = int(os.environ.get("PORT", 7860))
app.run(host="0.0.0.0", port=port, debug=True)