Spaces:
Sleeping
Sleeping
| 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() | |
| 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" | |
| } | |
| }) | |
| def health_check(): | |
| return jsonify({ | |
| "status": "Running", | |
| "model_loaded": model.is_loaded() | |
| }) | |
| 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" | |
| }) | |
| 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) |