leo861 commited on
Commit
8c9c9e7
·
verified ·
1 Parent(s): e08930e

Upload app.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +86 -0
app.py ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import logging
3
+ from flask import Flask, render_template, request, jsonify
4
+ from flask_socketio import SocketIO
5
+ import joblib
6
+ import torch
7
+ import numpy as np
8
+
9
+ # Configure logging
10
+ logging.basicConfig(level=logging.INFO)
11
+ logger = logging.getLogger(__name__)
12
+
13
+ app = Flask(__name__)
14
+ socketio = SocketIO(app, cors_allowed_origins="*")
15
+
16
+ # Load models
17
+ try:
18
+ # Try loading from the current directory first
19
+ HEART_MODEL_PATH = os.path.join('heart', 'models', 'heart_model.joblib')
20
+ logger.info(f"Attempting to load heart model from {HEART_MODEL_PATH}")
21
+ heart_model = joblib.load(HEART_MODEL_PATH)
22
+ logger.info("Heart model loaded successfully")
23
+ except:
24
+ try:
25
+ # If that fails, try loading from the absolute path
26
+ HEART_MODEL_PATH = os.path.join(os.path.dirname(__file__), 'heart', 'models', 'heart_model.joblib')
27
+ logger.info(f"Attempting to load heart model from {HEART_MODEL_PATH}")
28
+ heart_model = joblib.load(HEART_MODEL_PATH)
29
+ logger.info("Heart model loaded successfully")
30
+ except Exception as e:
31
+ logger.error(f"Could not load heart model: {str(e)}")
32
+ heart_model = None
33
+
34
+ try:
35
+ MODEL_DIR = os.path.join(os.path.dirname(__file__), 'models')
36
+ logger.info(f"Attempting to load autoencoder from {MODEL_DIR}")
37
+ autoencoder = torch.load(os.path.join(MODEL_DIR, 'best_model.pth'))
38
+ autoencoder.eval()
39
+ logger.info("Autoencoder model loaded successfully")
40
+ except Exception as e:
41
+ logger.error(f"Could not load autoencoder model: {str(e)}")
42
+ autoencoder = None
43
+
44
+ @app.route('/')
45
+ def home():
46
+ return render_template('index.html')
47
+
48
+ @app.route('/health')
49
+ def health():
50
+ status = {
51
+ 'status': 'healthy',
52
+ 'models': {
53
+ 'heart_model': heart_model is not None,
54
+ 'autoencoder': autoencoder is not None
55
+ }
56
+ }
57
+ return jsonify(status)
58
+
59
+ @app.route('/predict', methods=['POST'])
60
+ def predict():
61
+ try:
62
+ data = request.get_json()
63
+ if not data:
64
+ return jsonify({'status': 'error', 'message': 'No data provided'}), 400
65
+
66
+ # Add your prediction logic here
67
+ logger.info("Processing prediction request")
68
+ result = {'status': 'success', 'prediction': 'normal'}
69
+ logger.info(f"Prediction completed: {result}")
70
+ return jsonify(result)
71
+ except Exception as e:
72
+ logger.error(f"Error during prediction: {str(e)}")
73
+ return jsonify({'status': 'error', 'message': str(e)}), 500
74
+
75
+ @socketio.on('connect')
76
+ def handle_connect():
77
+ logger.info('Client connected')
78
+
79
+ @socketio.on('disconnect')
80
+ def handle_disconnect():
81
+ logger.info('Client disconnected')
82
+
83
+ if __name__ == '__main__':
84
+ port = int(os.environ.get('PORT', 7860))
85
+ logger.info(f"Starting server on port {port}")
86
+ socketio.run(app, host='0.0.0.0', port=port)