import gradio as gr
from Backend import process_and_generate_report # Import backend functions
with gr.Blocks() as iface:
gr.Markdown("##
AI-DRIVEN DROPOUT PREDICTION AND PREVENTION TOOL
")
with gr.Row():
with gr.Column():
inputs = {}
gr.Markdown("### Basic Information")
with gr.Row():
inputs["roll_no"] = gr.Textbox(label="Roll No", value="7376211CS203")
inputs["semester"] = gr.Dropdown(label="Semester", choices=["I", "II", "III", "IV", "V", "VI", "VII", "VIII"], value="VIII", interactive=True)
gr.Markdown("### Degree Information")
inputs["degree"] = gr.Dropdown(label="Degree", choices=[
"B.E. - ELECTRONICS AND INSTRUMENTATION ENGINEERING",
"B.E. - ELECTRONICS AND COMMUNICATION ENGINEERING",
"B.E. - ELECTRICAL AND ELECTRONICS ENGINEERING",
"B.E. - COMPUTER SCIENCE AND ENGINEERING",
"B.E. - MECHANICAL ENGINEERING",
"B.E. - MECHATRONICS ENGINEERING",
"B.Tech. - AGRICULTURAL ENGINEERING",
"B.Tech. - ARTIFICIAL INTELLIGENCE AND DATA SCIENCE",
"B.Tech. - ARTIFICIAL INTELLIGENCE AND MACHINE LEARNING",
"B.Tech. - COMPUTER SCIENCE AND BUSINESS SYSTEMS",
"B.Tech. - INFORMATION TECHNOLOGY","B.Tech. - BIOTECHNOLOGY",
], value="B.E. - COMPUTER SCIENCE AND ENGINEERING", interactive=True)
inputs["special_lab"] = gr.Dropdown(label="Special Lab", choices=["Active", "Non-Active"], value="Non-Active", interactive=True)
gr.Markdown("### Academic Performance")
with gr.Row():
inputs["attendance_percentage"] = gr.Number(label="Attendance Percentage", minimum=0, maximum=100, value=90)
inputs["formative_assessment"] = gr.Number(label="Formative Assessment (Academic %)", minimum=0, maximum=100, value=50)
with gr.Row():
inputs["cgpa"] = gr.Number(label="CGPA", minimum=0, maximum=10, value=8.0)
inputs["current_sgpa"] = gr.Number(label="Current SGPA", minimum=0, maximum=10, value=7.5)
inputs["arrear_count"] = gr.Number(label="Arrear Count", minimum=0, maximum=48, value=1)
gr.Markdown("### Placement and Assessments")
with gr.Row():
inputs["placement_fa"] = gr.Number(label="Placement FA %", minimum=0, maximum=100, value=50)
inputs["placement_cumulative"] = gr.Number(label="Placement Cumulative", minimum=0, maximum=100, value=60)
inputs["placement_Attendence"] = gr.Number(label="Placement Attendance", minimum=0, maximum=100, value=70)
inputs["interim_assessment_status"] = gr.Number(label="Interim Assessment Status", minimum=0, maximum=100, value=70)
inputs["training_assessment_status"] = gr.Number(label="Training Assessment Status", minimum=0, maximum=100, value=75)
inputs["mock_assessment_status"] = gr.Number(label="Mock Assessment Status", minimum=0, maximum=100, value=80)
gr.Markdown("### Skill Rankings")
with gr.Row():
inputs["full_stack_rank"] = gr.Number(label="Full Stack Rank", minimum=0, maximum=1700, value=850)
inputs["ps_rank"] = gr.Number(label="PS Level Completed", minimum=0, maximum=30, value=3)
inputs["Overall_Skills_Acquired"] = gr.Number(label="Total Skills Acquired", value=7)
gr.Markdown("### Extracurricular Activities")
with gr.Row():
for key in ["Technical_Competition", "Paper_Presentation", "Project_Competition", "Product_Development", "Patent", "Internship", "Online_Course"]:
inputs[key] = gr.Number(label=key.replace("_", " ").title(), value=0)
submit = gr.Button("Predict Dropout")
with gr.Column():
gr.Markdown("### Prediction Output")
output_plot = gr.Plot(label="Dropout Risk Graph")
summary = gr.Textbox(label="Final Summary")
download_btn = gr.File(label="Download Report", interactive=False)
submit.click(
lambda *args: process_and_generate_report(**dict(zip(inputs.keys(), args))),
inputs=list(inputs.values()),
outputs=[output_plot, summary, download_btn]
)
iface.launch()