# import joblib | |
# import pandas as pd | |
# import gradio as gr | |
# # Load the scaler and models | |
# scaler = joblib.load("models/scaler.joblib") | |
# models = { | |
# "processing": joblib.load("models/svm_model_processing.joblib"), | |
# "perception": joblib.load("models/svm_model_perception.joblib"), | |
# "input": joblib.load("models/svm_model_input.joblib"), | |
# "understanding": joblib.load("models/svm_model_understanding.joblib") | |
# } | |
# def predict(course_overview, reading_file, abstract_materiale, concrete_material, visual_materials, | |
# self_assessment, exercises_submit, quiz_submitted, playing, paused, unstarted, buffering): | |
# try: | |
# input_data = { | |
# "course overview": [course_overview], | |
# "reading file": [reading_file], | |
# "abstract materiale": [abstract_materiale], | |
# "concrete material": [concrete_material], | |
# "visual materials": [visual_materials], | |
# "self-assessment": [self_assessment], | |
# "exercises submit": [exercises_submit], | |
# "quiz submitted": [quiz_submitted], | |
# "playing": [playing], | |
# "paused": [paused], | |
# "unstarted": [unstarted], | |
# "buffering": [buffering] | |
# } | |
# input_df = pd.DataFrame(input_data) | |
# input_scaled = scaler.transform(input_df) | |
# predictions = {} | |
# for target, model in models.items(): | |
# pred = model.predict(input_scaled) | |
# predictions[target] = pred[0] # Return as is, without converting to int | |
# return predictions | |
# except Exception as e: | |
# return {"error": str(e)} | |
# # Define Gradio interface using the latest syntax | |
# iface = gr.Interface( | |
# fn=predict, | |
# inputs=[ | |
# gr.Number(label="Course Overview"), | |
# gr.Number(label="Reading File"), | |
# gr.Number(label="Abstract Materiale"), | |
# gr.Number(label="Concrete Material"), | |
# gr.Number(label="Visual Materials"), | |
# gr.Number(label="Self Assessment"), | |
# gr.Number(label="Exercises Submit"), | |
# gr.Number(label="Quiz Submitted"), | |
# gr.Number(label="Playing"), | |
# gr.Number(label="Paused"), | |
# gr.Number(label="Unstarted"), | |
# gr.Number(label="Buffering") | |
# ], | |
# outputs=gr.JSON(), | |
# title="SVM Multi-Target Prediction", | |
# description="Enter the feature values to get predictions for processing, perception, input, and understanding." | |
# ) | |
# if __name__ == "__main__": | |
# iface.launch() | |
from fastapi import FastAPI, HTTPException | |
from pydantic import BaseModel | |
import joblib | |
import pandas as pd | |
# Load the scaler and models | |
scaler = joblib.load("models/scaler.joblib") | |
models = { | |
"processing": joblib.load("models/svm_model_processing.joblib"), | |
"perception": joblib.load("models/svm_model_perception.joblib"), | |
"input": joblib.load("models/svm_model_input.joblib"), | |
"understanding": joblib.load("models/svm_model_understanding.joblib"), | |
} | |
# Initialize the FastAPI app | |
app = FastAPI(title="SVM Multi-Target Prediction API") | |
# Define the input data model | |
class InputData(BaseModel): | |
course_overview: float | |
reading_file: float | |
abstract_materiale: float | |
concrete_material: float | |
visual_materials: float | |
self_assessment: float | |
exercises_submit: float | |
quiz_submitted: float | |
playing: float | |
paused: float | |
unstarted: float | |
buffering: float | |
# Define the prediction endpoint | |
def predict(input_data: InputData): | |
""" | |
Predict target values based on input features using pre-trained SVM models. | |
""" | |
try: | |
# Convert the input data to a DataFrame | |
input_df = pd.DataFrame([input_data.dict()]) | |
# Scale the input data | |
input_scaled = scaler.transform(input_df) | |
# Generate predictions for each target | |
predictions = { | |
target: model.predict(input_scaled)[0] | |
for target, model in models.items() | |
} | |
return {"predictions": predictions} | |
except ValueError as ve: | |
raise HTTPException(status_code=400, detail=f"Input value error: {ve}") | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=f"Unexpected error: {e}") | |