rifatmon's picture
feat: Minor revision on health_check response
f5fc6fe verified
from flask import Flask, request, jsonify
import pandas as pd
from model import WellnessRecommendationModel
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = Flask(__name__)
model = WellnessRecommendationModel()
@app.route('/', methods=['GET'])
def home():
return jsonify({
"message": "Health & Wellness Activity Category Recommendation API",
"description": "API untuk prediksi rekomendasi aktivitas health & wellness berdasarkan profil pengguna",
"endpoints": {
"/predict": "POST - Prediksi label aktivitas yang cocok berdasarkan data pengguna",
"/health": "GET - Health check",
"/model_info": "GET - Informasi tentang model"
}
})
@app.route('/health', methods=['GET'])
def health_check():
return jsonify({
"status": "Running",
"model_loaded": model.is_loaded()
})
@app.route('/model_info', methods=['GET'])
def model_info():
return jsonify({
"model_type": "Random Forest Classifier",
"target_classes": model.get_target_classes(),
"features": model.get_feature_names(),
"description": "Model untuk prediksi aktivitas wellness favorit pengguna"
})
@app.route('/predict', methods=['POST'])
def predict():
try:
data = request.get_json()
if not data:
return jsonify({"error": "No data provided"}), 400
required_fields = ['Umur', 'Jenis Kelamin', 'Kota', 'Frekuensi',
'Anggaran/Kunjungan (IDR)', 'Kemauan Bepergian',
'Metode Pemesanan', 'Tujuan Utama', 'Yang Dicari']
missing_fields = [field for field in required_fields if field not in data]
if missing_fields:
return jsonify({
"error": f"Missing required fields: {missing_fields}",
"required_fields": required_fields
}), 400
df_input = pd.DataFrame([data])
prediction, probability = model.predict(df_input)
response = {
"prediction": prediction,
"confidence": float(probability),
"input_data": data,
"all_probabilities": model.predict_proba(df_input)
}
return jsonify(response)
except Exception as e:
logger.error(f"Error in prediction: {str(e)}")
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=False)