Spaces:
Sleeping
Sleeping
| 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 βββββββββββββ | |
| def index(): | |
| return render_template("index.html", teams=TEAMS, venues=VENUES) | |
| def simulate(): | |
| return render_template("simulate.html", teams=TEAMS, venues=VENUES) | |
| def model_info(): | |
| return render_template("model_info.html") | |
| # βββββββββββββ API βββββββββββββ | |
| 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 | |
| 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) |