|
|
import gradio as gr
|
|
|
from utils import get_kmers
|
|
|
import joblib
|
|
|
import pandas as pd
|
|
|
|
|
|
|
|
|
pipeline = joblib.load("models/gradient_boosting_pipeline.pkl")
|
|
|
label_encoder = joblib.load("models/label_encoder.pkl")
|
|
|
|
|
|
idx_to_label = {
|
|
|
0: "BIOLOGICAL_REGION",
|
|
|
1: "OTHER",
|
|
|
2: "PROTEIN_CODING",
|
|
|
3: "PSEUDO",
|
|
|
4: "ncRNA",
|
|
|
5: "rRNA",
|
|
|
6: "scRNA",
|
|
|
7: "snRNA",
|
|
|
8: "snoRNA",
|
|
|
9: "tRNA"
|
|
|
}
|
|
|
|
|
|
|
|
|
def predict_gene(sequence, description):
|
|
|
"""
|
|
|
Run prediction for a single sample (called from UI).
|
|
|
"""
|
|
|
data = {
|
|
|
"NucleotideSequence": sequence,
|
|
|
"GeneGroupMethod": 'NCBI Ortholog',
|
|
|
"Description": description,
|
|
|
"SequenceLength": int(len(sequence)),
|
|
|
}
|
|
|
df = pd.DataFrame([data])
|
|
|
|
|
|
pred = pipeline.predict(df)[0]
|
|
|
return idx_to_label.get(pred, "Unknown")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def build_ui():
|
|
|
with gr.Blocks() as demo:
|
|
|
gr.Markdown("# 🧬 Gene Type Classifier")
|
|
|
gr.Markdown("Enter gene details below and get predictions:")
|
|
|
|
|
|
sequence = gr.Textbox(label="Nucleotide Sequence", placeholder="Enter sequence...")
|
|
|
description = gr.Textbox(label="Description", placeholder="Enter description...")
|
|
|
|
|
|
output = gr.Textbox(label="Prediction Result")
|
|
|
|
|
|
gr.Button("Predict").click(
|
|
|
predict_gene,
|
|
|
inputs=[sequence, description],
|
|
|
outputs=output
|
|
|
)
|
|
|
|
|
|
return demo
|
|
|
|