Grade_tester / app.py
DetectiveShadow's picture
Update app.py
1920313 verified
# app.py
import gradio as gr
import pandas as pd
import joblib
from huggingface_hub import hf_hub_download
MODEL_REPO = "DetectiveShadow/Grade_predictor" # where assignment_predictor.pkl lives
def load_model():
pipe = joblib.load(hf_hub_download(MODEL_REPO, "assignment_predictor.pkl"))
return pipe
PIPE = load_model()
SUBJECTS = ["Math","Science","English","History","Tech","Drama","Elective"]
DIFFICULTY = ["Regular","Honors","AP"]
ASSIGN_TYPES = ["Assignment","Test","Project"]
def predict(attendance, hours, grade_level, subject, difficulty, assignment_type, confidence):
row = pd.DataFrame([{
"attendance": float(attendance),
"hours_studied": int(hours),
"grade_level": int(grade_level),
"subject": subject,
"course_difficulty": difficulty,
"assignment_type": assignment_type,
"confidence_before_assessment": int(confidence),
}])
score = float(PIPE.predict(row)[0])
def to_letter(x):
if x >= 90: return "A"
if x >= 80: return "B"
if x >= 70: return "C"
if x >= 60: return "D"
return "F"
return {"Predicted Assignment Score": round(score, 1), "Letter": to_letter(score)}
with gr.Blocks(title="Assignment Score Predictor") as demo:
gr.Markdown("# 📝 Assignment Score Predictor")
gr.Markdown("Predict a single assignment score using your study & course details (no uploads).")
with gr.Row():
attendance = gr.Slider(0.5, 1.0, value=0.95, step=0.01, label="Attendance (0–1)")
hours = gr.Slider(0, 30, value=8, step=1, label="Hours studied")
with gr.Row():
grade_lvl = gr.Slider(5, 12, value=11, step=1, label="Grade level")
subject = gr.Dropdown(SUBJECTS, value="Math", label="Subject", allow_custom_value=True)
with gr.Row():
difficulty = gr.Dropdown(DIFFICULTY, value="Regular", label="Course difficulty")
a_type = gr.Dropdown(ASSIGN_TYPES, value="Assignment", label="Assignment type")
confidence = gr.Slider(0, 10, value=6, step=1, label="Confidence before assessment")
go = gr.Button("Predict")
out = gr.JSON(label="Prediction")
go.click(predict, [attendance, hours, grade_lvl, subject, difficulty, a_type, confidence], out)
if __name__ == "__main__":
demo.launch()