Introvert-Extrovert-Predictor / introvert_extrovert_predictor.py
udbhav90's picture
Upload folder using huggingface_hub
864731c verified
import joblib
import pandas as pd
from flask import Flask, request, jsonify
# Initialize Flask app
app = Flask("Introvert Extrovert Predictor")
# Load the trained classification model
model = joblib.load("introvert_extrovert_predictor_v1_0.joblib")
api_hit_counter = 0
# Home route
@app.get("/")
def home():
return "Welcome to the Introvert-Extrovert Prediction API!"
@app.post("/v1/personality/predict")
def predict_personality_single():
global api_hit_counter
input_data = request.get_json()
# Prepare input sample
sample = {
"Time_spent_Alone": input_data["Time_spent_Alone"],
"Social_event_attendance": input_data["Social_event_attendance"],
"Going_outside": input_data["Going_outside"],
"Friends_circle_size": input_data["Friends_circle_size"],
"Post_frequency": input_data["Post_frequency"],
"Stage_fear": input_data["Stage_fear"],
"Drained_after_socializing": input_data["Drained_after_socializing"]
}
# Convert to DataFrame and predict
input_df = pd.DataFrame([sample])
prediction = model.predict(input_df).tolist()[0]
personality = "Extrovert" if prediction == 0 else "Introvert"
# Increment and print the counter
api_hit_counter += 1
print(f"API hit count: {api_hit_counter}")
return jsonify({'Predicted_Personality': personality})
@app.post("/v1/personality/predictbatch")
def predict_personality_batch():
# Get uploaded file
file = request.files['file']
# Read CSV file
input_df = pd.read_csv(file)
# Convert binary features to numerical (Yes → 1, No → 0)
input_df["Stage_fear"] = input_df["Stage_fear"].apply(lambda x: 1 if str(x).lower() == "yes" else 0)
input_df["Drained_after_socializing"] = input_df["Drained_after_socializing"].apply(lambda x: 1 if str(x).lower() == "yes" else 0)
# Predict personality
predictions = model.predict(input_df).tolist()
input_df["Predicted_Personality"] = ["Extrovert" if p == 0 else "Introvert" for p in predictions]
# Convert to dict for JSON output
result = input_df.to_dict(orient="records")
return jsonify(result)
# Run app
if __name__ == '__main__':
app.run(debug=True)