import numpy as np import gradio as gr import pickle import os # Try to load model, fallback to dummy if fails def load_or_create_model(): try: if os.path.exists('diabetes_model.pkl'): with open('diabetes_model.pkl', 'rb') as f: model = pickle.load(f) with open('scaler.pkl', 'rb') as f: scaler = pickle.load(f) print("✓ Loaded trained model") return model, scaler, False except: print("⚠ Could not load model, using demo mode") # Create simple rule-based model class SimpleModel: def predict(self, X): # Simple rule: glucose > 140 = diabetic return [1 if x[1] > 140 else 0 for x in X] def predict_proba(self, X): probs = [] for x in X: glucose = x[1] prob_diabetic = min(0.95, max(0.05, glucose / 200)) probs.append([1 - prob_diabetic, prob_diabetic]) return probs class SimpleScaler: def transform(self, X): return X return SimpleModel(), SimpleScaler(), True model, scaler, is_demo = load_or_create_model() def predict(pregnancies, glucose, bp, skin, insulin, bmi, pedigree, age): try: input_data = np.array([[pregnancies, glucose, bp, skin, insulin, bmi, pedigree, age]]) # Scale if hasattr(scaler, 'transform'): input_data = scaler.transform(input_data) # Predict prediction = model.predict(input_data)[0] # Get probability if hasattr(model, 'predict_proba'): proba = model.predict_proba(input_data)[0] confidence = proba[1] if prediction == 1 else proba[0] else: confidence = 0.5 result = "Diabetic" if prediction == 1 else "Non-Diabetic" risk = "High" if confidence > 0.7 else "Medium" if confidence > 0.4 else "Low" return { "result": result, "confidence": f"{confidence * 100:.1f}%", "risk_level": risk, "demo_mode": is_demo, "glucose_status": "High" if glucose > 140 else "Normal" if glucose > 70 else "Low" } except Exception as e: return {"error": str(e)} # Create Gradio interface iface = gr.Interface( fn=predict, inputs=[ gr.Number(label="Pregnancies", value=2), gr.Number(label="Glucose (mg/dL)", value=148), gr.Number(label="Blood Pressure (mmHg)", value=72), gr.Number(label="Skin Thickness (mm)", value=35), gr.Number(label="Insulin (mu U/ml)", value=0), gr.Number(label="BMI (kg/m²)", value=33.6), gr.Number(label="Diabetes Pedigree", value=0.627), gr.Number(label="Age (years)", value=50) ], outputs=gr.JSON(label="Prediction Result"), title="Diabetes Risk Predictor", description="Enter health metrics to assess diabetes risk", examples=[ [2, 148, 72, 35, 0, 33.6, 0.627, 50], [1, 85, 66, 29, 0, 26.6, 0.351, 31], [5, 116, 74, 0, 0, 25.6, 0.201, 30] ], theme="soft" ) if __name__ == "__main__": iface.launch(server_name="0.0.0.0", server_port=7860)