import gradio as gr import joblib import numpy as np # Load your saved joblib model, scaler, label_encoder, feature order d = joblib.load("genre_classifier.joblib") clf = d["model"] scaler = d["scaler"] le = d["label_encoder"] feature_order = d["features"] # Should match what your web UI sends def predict_genre( danceability, energy, key, loudness, mode, speechiness, acousticness, instrumentalness, liveness, valence, tempo, time_signature ): # Pack input as expected by model X = np.array([[ danceability, energy, key, loudness, mode, speechiness, acousticness, instrumentalness, liveness, valence, tempo, time_signature ]]) X_scaled = scaler.transform(X) pred = clf.predict(X_scaled) label = le.inverse_transform(pred)[0] return label # For API: single call with all features iface = gr.Interface( fn=predict_genre, inputs=[ gr.Number(label=f) for f in feature_order ], outputs=gr.Text(label="Predicted Genre"), title="Billboard Genre Classifier", description="Predicts the genre from audio features. For API usage, send a POST to /run/predict.", allow_flagging="never" ) if __name__ == "__main__": iface.launch()