Spaces:
Build error
Build error
File size: 2,958 Bytes
8037081 a9bbd1e 8037081 a9bbd1e 8037081 f59485e a9bbd1e 85a8874 a9bbd1e f896d92 a9bbd1e 85a8874 8037081 a9bbd1e 8037081 a9bbd1e 623e529 a9bbd1e 8037081 a9bbd1e 8037081 a9bbd1e f896d92 8037081 a9bbd1e 8037081 a9bbd1e 8037081 a9bbd1e 8037081 a9bbd1e 8037081 a9bbd1e 8037081 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
import gradio as gr
import os
import subprocess
import uuid
import pandas as pd
import sys
# Append chemprop and chemprop_updated folders explicitly
sys.path.append(os.path.abspath("chemprop"))
sys.path.append(os.path.abspath("chemprop-updated"))
# Helper to save SMILES string to a temporary CSV
def save_smiles_to_csv(smiles: str, temp_dir="temp_inputs"):
os.makedirs(temp_dir, exist_ok=True)
file_path = os.path.join(temp_dir, f"{uuid.uuid4().hex}.csv")
df = pd.DataFrame({"smiles": [smiles]})
df.to_csv(file_path, index=False)
return file_path
# Core prediction logic
def predict(model_version, dataset_name, input_type, file=None, smiles=None):
# Set paths
if model_version == "Vanilla Chemprop":
model_dir = "chemprop"
model_path = f"model_weight/{dataset_name}/best_unbalanced.pt"
script_path = "chemprop/chemprop/cli/predict.py"
else:
model_dir = "chemprop_updated"
model_path = f"model_weight/{dataset_name}/best_bert_fusion.pt"
script_path = "chemprop-updated/chemprop_updated/cli/predict.py"
# Prepare input file
if input_type == "Upload CSV":
if file is None:
return "Please upload a CSV file."
input_path = file.name
else:
if not smiles:
return "Please enter a SMILES string."
input_path = save_smiles_to_csv(smiles)
# Run prediction command
cmd = [
"python",script_path,
"--test-path", input_path,
"--model-paths", model_path,
"--smiles-columns", "smiles"
]
try:
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
return f"Error:\n{result.stderr}"
return f"Prediction Output:\n{result.stdout}"
except Exception as e:
return f"Execution Failed: {str(e)}"
# Gradio UI setup
with gr.Blocks() as demo:
gr.Markdown("## 🧪 Molecular Property Prediction using GNN and Transformers")
model_version = gr.Radio(
["Vanilla Chemprop", "Updated Fusion Model"],
label="Select Model Version"
)
dataset_name = gr.Radio(["BBBP", "ClinTox"], label="Select Dataset")
input_type = gr.Radio(["Upload CSV", "Single SMILES"], label="Input Type")
file_input = gr.File(file_types=[".csv"], label="Upload CSV", visible=True)
smiles_input = gr.Textbox(label="Enter SMILES string", visible=False)
def toggle_inputs(choice):
return {
file_input: gr.update(visible=(choice == "Upload CSV")),
smiles_input: gr.update(visible=(choice == "Single SMILES"))
}
input_type.change(toggle_inputs, input_type, [file_input, smiles_input])
predict_button = gr.Button("Predict")
output = gr.Textbox(label="Output")
predict_button.click(
fn=predict,
inputs=[model_version, dataset_name, input_type, file_input, smiles_input],
outputs=output
)
demo.launch()
|