Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -15,29 +15,29 @@ warnings.filterwarnings('ignore', category=UserWarning, module='sklearn')
|
|
| 15 |
# Logging setup
|
| 16 |
logging.basicConfig(level=logging.INFO)
|
| 17 |
|
| 18 |
-
#
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
|
|
|
|
|
|
| 22 |
|
| 23 |
-
# Model ZIP
|
| 24 |
MODEL_PATHS = {
|
| 25 |
"DIABETES_MODEL": "finaliseddiabetes_model.zip",
|
| 26 |
"SCALER": "finalisedscaler.zip",
|
| 27 |
"MULTI_MODEL": "nodiabetes.zip",
|
| 28 |
}
|
| 29 |
|
| 30 |
-
# Extracted
|
| 31 |
EXTRACTED_MODELS = {
|
| 32 |
"DIABETES_MODEL": "finaliseddiabetes_model.joblib",
|
| 33 |
"SCALER": "finalisedscaler.joblib",
|
| 34 |
"MULTI_MODEL": "nodiabetes.joblib",
|
| 35 |
}
|
| 36 |
|
| 37 |
-
# Use writeable temp dir
|
| 38 |
TMP_DIR = "/tmp"
|
| 39 |
|
| 40 |
-
# Flask app init
|
| 41 |
app = Flask(__name__)
|
| 42 |
CORS(app, supports_credentials=True)
|
| 43 |
|
|
@@ -103,11 +103,18 @@ def initialize_models():
|
|
| 103 |
models = {}
|
| 104 |
for model_key, zip_filename in MODEL_PATHS.items():
|
| 105 |
extracted_filename = EXTRACTED_MODELS[model_key]
|
|
|
|
|
|
|
| 106 |
zip_path = os.path.join(TMP_DIR, zip_filename)
|
| 107 |
if not os.path.exists(zip_path):
|
| 108 |
-
download_model(
|
| 109 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
models[model_key] = load_model(extracted_filename)
|
|
|
|
| 111 |
return models
|
| 112 |
|
| 113 |
models = initialize_models()
|
|
@@ -183,7 +190,7 @@ def predict_health():
|
|
| 183 |
|
| 184 |
gender = validate_gender(data.get('gender'))
|
| 185 |
if gender is None:
|
| 186 |
-
return jsonify({'status': 'error', 'error': 'Invalid gender value. Must be "male" or "female"'}), 400
|
| 187 |
|
| 188 |
systolic, diastolic = validate_blood_pressure(data.get('systolic'), data.get('diastolic'))
|
| 189 |
if systolic is None or diastolic is None:
|
|
|
|
| 15 |
# Logging setup
|
| 16 |
logging.basicConfig(level=logging.INFO)
|
| 17 |
|
| 18 |
+
# Load URLs from environment
|
| 19 |
+
MODEL_URLS = {
|
| 20 |
+
"DIABETES_MODEL": os.getenv("DIABETES_MODEL_URL"),
|
| 21 |
+
"SCALER": os.getenv("SCALER_URL"),
|
| 22 |
+
"MULTI_MODEL": os.getenv("MULTI_MODEL_URL"),
|
| 23 |
+
}
|
| 24 |
|
| 25 |
+
# Model ZIP filenames
|
| 26 |
MODEL_PATHS = {
|
| 27 |
"DIABETES_MODEL": "finaliseddiabetes_model.zip",
|
| 28 |
"SCALER": "finalisedscaler.zip",
|
| 29 |
"MULTI_MODEL": "nodiabetes.zip",
|
| 30 |
}
|
| 31 |
|
| 32 |
+
# Extracted model file names
|
| 33 |
EXTRACTED_MODELS = {
|
| 34 |
"DIABETES_MODEL": "finaliseddiabetes_model.joblib",
|
| 35 |
"SCALER": "finalisedscaler.joblib",
|
| 36 |
"MULTI_MODEL": "nodiabetes.joblib",
|
| 37 |
}
|
| 38 |
|
|
|
|
| 39 |
TMP_DIR = "/tmp"
|
| 40 |
|
|
|
|
| 41 |
app = Flask(__name__)
|
| 42 |
CORS(app, supports_credentials=True)
|
| 43 |
|
|
|
|
| 103 |
models = {}
|
| 104 |
for model_key, zip_filename in MODEL_PATHS.items():
|
| 105 |
extracted_filename = EXTRACTED_MODELS[model_key]
|
| 106 |
+
url = MODEL_URLS.get(model_key)
|
| 107 |
+
|
| 108 |
zip_path = os.path.join(TMP_DIR, zip_filename)
|
| 109 |
if not os.path.exists(zip_path):
|
| 110 |
+
if not download_model(url, zip_filename):
|
| 111 |
+
continue
|
| 112 |
+
|
| 113 |
+
if not extract_if_needed(zip_filename, extracted_filename):
|
| 114 |
+
continue
|
| 115 |
+
|
| 116 |
models[model_key] = load_model(extracted_filename)
|
| 117 |
+
|
| 118 |
return models
|
| 119 |
|
| 120 |
models = initialize_models()
|
|
|
|
| 190 |
|
| 191 |
gender = validate_gender(data.get('gender'))
|
| 192 |
if gender is None:
|
| 193 |
+
return jsonify({'status': 'error', 'error': 'Invalid gender value. Must be \"male\" or \"female\"'}), 400
|
| 194 |
|
| 195 |
systolic, diastolic = validate_blood_pressure(data.get('systolic'), data.get('diastolic'))
|
| 196 |
if systolic is None or diastolic is None:
|