Update app.py
Browse files
app.py
CHANGED
@@ -1,76 +1,6 @@
|
|
1 |
-
# import joblib
|
2 |
-
# import pandas as pd
|
3 |
-
# import gradio as gr
|
4 |
-
|
5 |
-
# # Load the scaler and models
|
6 |
-
# scaler = joblib.load("models/scaler.joblib")
|
7 |
-
# models = {
|
8 |
-
# "processing": joblib.load("models/svm_model_processing.joblib"),
|
9 |
-
# "perception": joblib.load("models/svm_model_perception.joblib"),
|
10 |
-
# "input": joblib.load("models/svm_model_input.joblib"),
|
11 |
-
# "understanding": joblib.load("models/svm_model_understanding.joblib")
|
12 |
-
# }
|
13 |
-
|
14 |
-
# def predict(course_overview, reading_file, abstract_materiale, concrete_material, visual_materials,
|
15 |
-
# self_assessment, exercises_submit, quiz_submitted, playing, paused, unstarted, buffering):
|
16 |
-
# try:
|
17 |
-
# input_data = {
|
18 |
-
# "course overview": [course_overview],
|
19 |
-
# "reading file": [reading_file],
|
20 |
-
# "abstract materiale": [abstract_materiale],
|
21 |
-
# "concrete material": [concrete_material],
|
22 |
-
# "visual materials": [visual_materials],
|
23 |
-
# "self-assessment": [self_assessment],
|
24 |
-
# "exercises submit": [exercises_submit],
|
25 |
-
# "quiz submitted": [quiz_submitted],
|
26 |
-
# "playing": [playing],
|
27 |
-
# "paused": [paused],
|
28 |
-
# "unstarted": [unstarted],
|
29 |
-
# "buffering": [buffering]
|
30 |
-
# }
|
31 |
-
|
32 |
-
# input_df = pd.DataFrame(input_data)
|
33 |
-
# input_scaled = scaler.transform(input_df)
|
34 |
-
|
35 |
-
# predictions = {}
|
36 |
-
# for target, model in models.items():
|
37 |
-
# pred = model.predict(input_scaled)
|
38 |
-
# predictions[target] = pred[0] # Return as is, without converting to int
|
39 |
-
|
40 |
-
# return predictions
|
41 |
-
|
42 |
-
# except Exception as e:
|
43 |
-
# return {"error": str(e)}
|
44 |
-
|
45 |
-
# # Define Gradio interface using the latest syntax
|
46 |
-
# iface = gr.Interface(
|
47 |
-
# fn=predict,
|
48 |
-
# inputs=[
|
49 |
-
# gr.Number(label="Course Overview"),
|
50 |
-
# gr.Number(label="Reading File"),
|
51 |
-
# gr.Number(label="Abstract Materiale"),
|
52 |
-
# gr.Number(label="Concrete Material"),
|
53 |
-
# gr.Number(label="Visual Materials"),
|
54 |
-
# gr.Number(label="Self Assessment"),
|
55 |
-
# gr.Number(label="Exercises Submit"),
|
56 |
-
# gr.Number(label="Quiz Submitted"),
|
57 |
-
# gr.Number(label="Playing"),
|
58 |
-
# gr.Number(label="Paused"),
|
59 |
-
# gr.Number(label="Unstarted"),
|
60 |
-
# gr.Number(label="Buffering")
|
61 |
-
# ],
|
62 |
-
# outputs=gr.JSON(),
|
63 |
-
# title="SVM Multi-Target Prediction",
|
64 |
-
# description="Enter the feature values to get predictions for processing, perception, input, and understanding."
|
65 |
-
# )
|
66 |
-
|
67 |
-
# if __name__ == "__main__":
|
68 |
-
# iface.launch()
|
69 |
-
|
70 |
-
from fastapi import FastAPI, HTTPException
|
71 |
-
from pydantic import BaseModel
|
72 |
import joblib
|
73 |
import pandas as pd
|
|
|
74 |
|
75 |
# Load the scaler and models
|
76 |
scaler = joblib.load("models/scaler.joblib")
|
@@ -78,48 +8,62 @@ models = {
|
|
78 |
"processing": joblib.load("models/svm_model_processing.joblib"),
|
79 |
"perception": joblib.load("models/svm_model_perception.joblib"),
|
80 |
"input": joblib.load("models/svm_model_input.joblib"),
|
81 |
-
"understanding": joblib.load("models/svm_model_understanding.joblib")
|
82 |
}
|
83 |
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
# Define the input data model
|
88 |
-
class InputData(BaseModel):
|
89 |
-
course_overview: float
|
90 |
-
reading_file: float
|
91 |
-
abstract_materiale: float
|
92 |
-
concrete_material: float
|
93 |
-
visual_materials: float
|
94 |
-
self_assessment: float
|
95 |
-
exercises_submit: float
|
96 |
-
quiz_submitted: float
|
97 |
-
playing: float
|
98 |
-
paused: float
|
99 |
-
unstarted: float
|
100 |
-
buffering: float
|
101 |
-
|
102 |
-
# Define the prediction endpoint
|
103 |
-
@app.post("/predict")
|
104 |
-
def predict(input_data: InputData):
|
105 |
-
"""
|
106 |
-
Predict target values based on input features using pre-trained SVM models.
|
107 |
-
"""
|
108 |
try:
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
|
|
|
|
|
|
119 |
}
|
120 |
-
return {"predictions": predictions}
|
121 |
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
except Exception as e:
|
125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import joblib
|
2 |
import pandas as pd
|
3 |
+
import gradio as gr
|
4 |
|
5 |
# Load the scaler and models
|
6 |
scaler = joblib.load("models/scaler.joblib")
|
|
|
8 |
"processing": joblib.load("models/svm_model_processing.joblib"),
|
9 |
"perception": joblib.load("models/svm_model_perception.joblib"),
|
10 |
"input": joblib.load("models/svm_model_input.joblib"),
|
11 |
+
"understanding": joblib.load("models/svm_model_understanding.joblib")
|
12 |
}
|
13 |
|
14 |
+
def predict(course_overview, reading_file, abstract_materiale, concrete_material, visual_materials,
|
15 |
+
self_assessment, exercises_submit, quiz_submitted, playing, paused, unstarted, buffering):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
try:
|
17 |
+
input_data = {
|
18 |
+
"course overview": [course_overview],
|
19 |
+
"reading file": [reading_file],
|
20 |
+
"abstract materiale": [abstract_materiale],
|
21 |
+
"concrete material": [concrete_material],
|
22 |
+
"visual materials": [visual_materials],
|
23 |
+
"self-assessment": [self_assessment],
|
24 |
+
"exercises submit": [exercises_submit],
|
25 |
+
"quiz submitted": [quiz_submitted],
|
26 |
+
"playing": [playing],
|
27 |
+
"paused": [paused],
|
28 |
+
"unstarted": [unstarted],
|
29 |
+
"buffering": [buffering]
|
30 |
}
|
|
|
31 |
|
32 |
+
input_df = pd.DataFrame(input_data)
|
33 |
+
input_scaled = scaler.transform(input_df)
|
34 |
+
|
35 |
+
predictions = {}
|
36 |
+
for target, model in models.items():
|
37 |
+
pred = model.predict(input_scaled)
|
38 |
+
predictions[target] = pred[0] # Return as is, without converting to int
|
39 |
+
|
40 |
+
return predictions
|
41 |
+
|
42 |
except Exception as e:
|
43 |
+
return {"error": str(e)}
|
44 |
+
|
45 |
+
# Define Gradio interface using the latest syntax
|
46 |
+
iface = gr.Interface(
|
47 |
+
fn=predict,
|
48 |
+
inputs=[
|
49 |
+
gr.Number(label="Course Overview"),
|
50 |
+
gr.Number(label="Reading File"),
|
51 |
+
gr.Number(label="Abstract Materiale"),
|
52 |
+
gr.Number(label="Concrete Material"),
|
53 |
+
gr.Number(label="Visual Materials"),
|
54 |
+
gr.Number(label="Self Assessment"),
|
55 |
+
gr.Number(label="Exercises Submit"),
|
56 |
+
gr.Number(label="Quiz Submitted"),
|
57 |
+
gr.Number(label="Playing"),
|
58 |
+
gr.Number(label="Paused"),
|
59 |
+
gr.Number(label="Unstarted"),
|
60 |
+
gr.Number(label="Buffering")
|
61 |
+
],
|
62 |
+
outputs=gr.JSON(),
|
63 |
+
title="SVM Multi-Target Prediction",
|
64 |
+
description="Enter the feature values to get predictions for processing, perception, input, and understanding."
|
65 |
+
)
|
66 |
+
|
67 |
+
if __name__ == "__main__":
|
68 |
+
iface.launch()
|
69 |
+
|