import gradio as gr def diagnose_network( availability, comcase, module_stolen, site_dismantle, blacksite, force_majeure, trans_alarm, trans_pl, trans_tnl, ul_interference, vswr, alarm_problem, rsrp, rsrq, prb, max_user, active_user_max, no_dominant, cssr, profile, simcard, ue, it_problem, core ): root_cause, sub_root_cause, action = "", "", "" rsrp = float(rsrp) rsrq = float(rsrq) if availability == "Not Safe": root_cause = "Availability" sub_root_cause = "Availability Problem" action = "πŸ› οΈ Troubleshoot" elif comcase == "Not Safe": root_cause = "Availability" sub_root_cause = "Comcase" action = "πŸ”„ Recovery" elif module_stolen == "Not Safe": root_cause = "Availability" sub_root_cause = "Module Stolen" action = "πŸ”„ Recovery" elif site_dismantle == "Not Safe": root_cause = "Availability" sub_root_cause = "Site Dismantle" action = "⚑Percepatan Relokasi" elif blacksite == "Not Safe": root_cause = "Availability" sub_root_cause = "Blacksite" action = "Optimization" elif force_majeure == "Not Safe": root_cause = "Availability" sub_root_cause = "Force Majeure" action = "πŸ› οΈ Troubleshoot" elif trans_alarm == "Not Safe": root_cause = "Quality" sub_root_cause = "Trans Alarm" action = "πŸ› οΈ Troubleshoot" elif trans_pl == "Not Safe": root_cause = "Quality" sub_root_cause = "Trans Packet Loss" action = "πŸ› οΈ Troubleshoot" elif trans_tnl == "Not Safe": root_cause = "Quality" sub_root_cause = "Trans TNL" action = "πŸ› οΈ Troubleshoot" elif ul_interference == "Not Safe": root_cause = "Quality" sub_root_cause = "High UL Interference" action = "πŸ› οΈ Troubleshoot" elif vswr == "Not Safe": root_cause = "Quality" sub_root_cause = "High VSWR" action = "πŸ› οΈ Troubleshoot" elif alarm_problem == "Not Safe": root_cause = "Quality" sub_root_cause = "Alarm Problem" action = "πŸ› οΈ Troubleshoot" elif rsrp < -105: root_cause = "Coverage" sub_root_cause = "Low Coverage" action = "πŸ“Ά Optimization" elif prb == "Not Safe": root_cause = "Capacity" sub_root_cause = "High PRB" action = "πŸ“Ά Optimization" elif max_user == "Not Safe": root_cause = "Capacity" sub_root_cause = "High Max User" action = "πŸ“Ά Optimization" elif active_user_max == "Not Safe": root_cause = "Capacity" sub_root_cause = "High Active User" action = "πŸ“Ά Optimization" elif no_dominant == "Yes": root_cause = "Quality" sub_root_cause = "No Dominant Coverage" action = "πŸ“Ά Optimization" elif cssr == "Not Safe": root_cause = "Quality" sub_root_cause = "Performance Problem" action = "πŸ“Ά Optimization" elif profile == "Not Safe": root_cause = "Others" sub_root_cause = "Profile Problem" action = "πŸ“€ Escalated to HQ" elif simcard == "Not Safe": root_cause = "Others" sub_root_cause = "Simcard Problem" action = "πŸ‘¨β€πŸ« User Education" elif ue == "Not Safe": root_cause = "Others" sub_root_cause = "UE Problem" action = "πŸ‘¨β€πŸ« User Education" elif it_problem == "Not Safe": root_cause = "Others" sub_root_cause = "IT Problem" action = "πŸ“€ Escalated to HQ" elif core == "Not Safe": root_cause = "Others" sub_root_cause = "Core Problem" action = "πŸ› οΈ Troubleshoot" elif rsrq < -15: root_cause = "Quality" sub_root_cause = "Quality Problem" action = "πŸ“Ά Optimization" else: root_cause = "Quality" sub_root_cause = "Quality (Network Normal)" action = "βœ… Optimization" return f"Root Cause: {root_cause}\nSub Root Cause: {sub_root_cause}\nAction: {action}" with gr.Blocks(theme=gr.themes.Ocean()) as demo: gr.Markdown("# πŸ”Ž Network Issue Diagnoser") gr.Markdown("A simple tool to analyze **telecommunication KPIs** and detect issues. This is an early version based on **if–else rules**. Future plan: extend to **AI-driven predictive diagnosis**.") with gr.Row(): with gr.Column(): availability = gr.Radio(["Safe", "Not Safe"], label="Availability", value="Safe") comcase = gr.Radio(["Safe", "Not Safe"], label="Comcase", value="Safe") module_stolen = gr.Radio(["Safe", "Not Safe"], label="Module Stolen", value="Safe") site_dismantle = gr.Radio(["Safe", "Not Safe"], label="Site Dismantle", value="Safe") blacksite = gr.Radio(["Safe", "Not Safe"], label="Blacksite", value="Safe") force_majeure = gr.Radio(["Safe", "Not Safe"], label="Force Majeure", value="Safe") trans_alarm = gr.Radio(["Safe", "Not Safe"], label="Trans Alarm", value="Safe") trans_pl = gr.Radio(["Safe", "Not Safe"], label="Trans Packet Loss (>0.1%)", value="Safe") with gr.Column(): trans_tnl = gr.Radio(["Safe", "Not Safe"], label="Trans TNL (>500)", value="Safe") ul_interference = gr.Radio(["Safe", "Not Safe"], label="UL Interference (>-100)", value="Safe") vswr = gr.Radio(["Safe", "Not Safe"], label="VSWR (>140)", value="Safe") alarm_problem = gr.Radio(["Safe", "Not Safe"], label="Alarm Problem", value="Safe") rsrp = gr.Textbox(label="RSRP (>-105 dBm)", value="-100") rsrq = gr.Textbox(label="RSRQ (>-15 dB)", value="-10") prb = gr.Radio(["Safe", "Not Safe"], label="PRB Usage (>90%)", value="Safe") max_user = gr.Radio(["Safe", "Not Safe"], label="Max User (>150)", value="Safe") with gr.Column(): active_user_max = gr.Radio(["Safe", "Not Safe"], label="Active User Max (>20)", value="Safe") no_dominant = gr.Radio(["No", "Yes"], label="No Dominant Coverage", value="No") cssr = gr.Radio(["Safe", "Not Safe"], label="CSSR", value="Safe") profile = gr.Radio(["Safe", "Not Safe"], label="Profile Problem", value="Safe") simcard = gr.Radio(["Safe", "Not Safe"], label="Simcard Problem", value="Safe") ue = gr.Radio(["Safe", "Not Safe"], label="UE Problem", value="Safe") it_problem = gr.Radio(["Safe", "Not Safe"], label="IT Problem", value="Safe") core = gr.Radio(["Safe", "Not Safe"], label="Core Problem", value="Safe") submit = gr.Button("Submit") output = gr.Textbox(label="πŸ“‹ Diagnosis Result", interactive=True, lines=5) submit.click( diagnose_network, inputs=[ availability, comcase, module_stolen, site_dismantle, blacksite, force_majeure, trans_alarm, trans_pl, trans_tnl, ul_interference, vswr, alarm_problem, rsrp, rsrq, prb, max_user, active_user_max, no_dominant, cssr, profile, simcard, ue, it_problem, core ], outputs=output ) demo.launch()