import gradio as gr import numpy as np from joblib import load from tensorflow.keras.models import load_model import tensorflow as tf import requests # Load models from Hugging Face (update with your model URLs) def load_huggingface_model(model_url): response = requests.get(model_url) with open("model_temp.joblib" if model_url.endswith(".joblib") else "model_temp.h5", "wb") as f: f.write(response.content) return load("model_temp.joblib") if model_url.endswith(".joblib") else load_model("model_temp.h5") # URLs of your models on Hugging Face MODEL_URLS = { 'Deep Learning': 'https://huggingface.co/your-username/best_DeepLearning_model/resolve/main/best_DeepLearning_model.h5', 'Support Vector Regression': 'https://huggingface.co/your-username/best_SVR_model/resolve/main/best_SVR_model.joblib', 'Random Forest Regression': 'https://huggingface.co/your-username/best_RandomForestRegressor_model/resolve/main/best_RandomForestRegressor_model.joblib', 'Decision Tree Regression': 'https://huggingface.co/your-username/best_DecisionTreeRegressor_model/resolve/main/best_DecisionTreeRegressor_model.joblib' } # Prediction function def multi_inputs(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12): try: model = load_huggingface_model(MODEL_URLS[input12]) # Convert numeric inputs to float input4, input5, input9 = float(input4), float(input5), float(input9) # Create input list with proper types inputs_to_transform = [ str(input1), str(input2), str(input3), input4, input5, float(input6), float(input7), float(input8), input9, str(input10), str(input11) ] # Reshape input for prediction input_data = np.array([inputs_to_transform], dtype=np.float32) if input12 == 'Deep Learning': tensor_input = tf.convert_to_tensor(input_data) prediction = model.predict(tensor_input, verbose=0) return float(prediction[0][0]) else: prediction = model.predict(input_data) return float(prediction[0]) except Exception as e: return f"Error in prediction: {str(e)}" # Gradio Interface interface = gr.Interface( fn=multi_inputs, inputs=[ gr.Radio(['male', 'female'], label='Gender'), gr.Dropdown(['Race1', 'Race2'], label='Race'), gr.Dropdown([20, 30, 40], label='Age'), gr.Number(label='Height (cm)'), gr.Number(label='Weight (kg)'), gr.Radio([0.0, 1.0], label='Diabetes'), gr.Radio([0.0, 1.0], label='Simvastatin'), gr.Radio([0.0, 1.0], label='Amiodarone'), gr.Number(label='INR'), gr.Dropdown(['Cyp2C9_A', 'Cyp2C9_B'], label='Cyp2C9 genotypes'), gr.Dropdown(['VKORC1_A', 'VKORC1_B'], label='VKORC1 genotypes'), gr.Dropdown(['Deep Learning', 'Support Vector Regression', 'Random Forest Regression', 'Decision Tree Regression'], label='Model Selection') ], outputs="number", live=False ) if __name__ == '__main__': interface.launch(debug=True)