Spaces:
Sleeping
Sleeping
| # 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() | |