model-space / app.py
Gagan0141's picture
Update app.py
aa2dc1a verified
from flask import Flask, render_template, request, redirect, url_for, session, flash
from werkzeug.security import generate_password_hash, check_password_hash
from supabase import create_client
import joblib
import numpy as np
import os
import skops.io as sio
app = Flask(__name__)
app.secret_key = "supersecretkey" # change in production
# -------- Supabase setup --------
SUPABASE_URL = os.environ.get("SUPABASE_URL")
SUPABASE_KEY = os.environ.get("SUPABASE_KEY")
if not SUPABASE_URL or not SUPABASE_KEY:
raise ValueError("Supabase URL or KEY not set in environment variables")
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
# -------- Load ML model --------
# model = joblib.load("rf_house_price_model.joblib")
model = sio.load("rf_house_price_model.skops")
#titanic_model = joblib.load("titanic_rf_model.joblib")
titanic_model = sio.load("titanic_rf_model.skops")
# Load Heart Disease model
heart_model = sio.load("heart_rf.skops")
# -------- Routes --------
@app.route("/")
def index():
if "username" in session:
return redirect(url_for("home"))
return redirect(url_for("login"))
# Signup
@app.route("/signup", methods=["GET", "POST"])
def signup():
if request.method == "POST":
username = request.form["username"]
password_hashed = generate_password_hash(request.form["password"])
# Check if username exists
res = supabase.table("users").select("*").eq("username", username).execute()
if res.data:
flash("Username already exists. Try another one.", "error")
return redirect(url_for("signup"))
# Insert new user
supabase.table("users").insert({"username": username, "password": password_hashed}).execute()
flash("Signup successful! Please log in.", "success")
return redirect(url_for("login"))
return render_template("signup.html")
# Login
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
res = supabase.table("users").select("*").eq("username", username).execute()
if res.data and check_password_hash(res.data[0]["password"], password):
session["username"] = username
flash("Login successful!", "success")
return redirect(url_for("home"))
flash("Invalid credentials. Try again.", "error")
return redirect(url_for("login"))
return render_template("login.html")
# Logout
@app.route("/logout")
def logout():
session.pop("username", None)
flash("You have been logged out.", "info")
return redirect(url_for("login"))
# Home page
@app.route("/home")
def home():
if "username" not in session:
return redirect(url_for("login"))
return render_template("home.html", username=session["username"])
#COUNTDOWN
@app.route("/countdown")
def countdown():
if "username" not in session:
return redirect(url_for("login"))
return render_template("countdown.html", username=session["username"])
# Predict page
@app.route("/predict", methods=["GET", "POST"])
def predict():
if "username" not in session:
return redirect(url_for("login"))
prediction = None
if request.method == "POST":
features = [
float(request.form["longitude"]),
float(request.form["latitude"]),
float(request.form["housing_median_age"]),
float(request.form["total_rooms"]),
float(request.form["total_bedrooms"]),
float(request.form["population"]),
float(request.form["households"]),
float(request.form["median_income"]),
float(request.form["rooms_per_household"])
]
prediction = round(model.predict([features])[0], 2)
return render_template("predict.html", prediction=prediction)
@app.route("/titanic", methods=["GET", "POST"])
def titanic():
if "username" not in session:
return redirect(url_for("login"))
prediction = None
if request.method == "POST":
# Example Titanic features (adjust to your model)
features = [
float(request.form["pclass"]),
float(request.form["sex"]), # encode 0=male,1=female
float(request.form["age"]),
float(request.form["sibsp"]),
float(request.form["parch"]),
float(request.form["fare"]),
float(request.form["alone"]), # encode 0=False,1=True
float(request.form["IsAlone"]), # encode 0=False,1=True
float(request.form["FamilySize"]),
float(request.form["embarked_Q"]), # encode 0=False,1=True
float(request.form["embarked_S"]) # encode 0=False,1=True
]
prediction = titanic_model.predict([features])[0]
return render_template("titanic.html", prediction=prediction)
@app.route("/heart", methods=["GET", "POST"])
def heart():
if "username" not in session:
return redirect(url_for("login"))
prediction = None
if request.method == "POST":
features = [
float(request.form["age"]),
float(request.form["sex"]),
float(request.form["cp"]),
float(request.form["trestbps"]),
float(request.form["chol"]),
float(request.form["fbs"]),
float(request.form["restecg"]),
float(request.form["thalach"]),
float(request.form["exang"]),
float(request.form["oldpeak"]),
float(request.form["slope"]),
float(request.form["ca"]),
float(request.form["thal"])
]
prediction = heart_model.predict([features])[0]
return render_template("heart.html", prediction=prediction)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)