Rockingstar1/llm-human-code-detection
0
1import gradio as gr2import sys3import os4 5# add project path6sys.path.append(os.path.join(os.path.dirname(__file__), "reflex_ui"))7 8from reflex_ui.reflex_ui.backend_bridge import run_prediction9 10 11def predict(code, language, top_k):12 if not code.strip():13 return "Please enter code.", "", "", ""14 15 try:16 result = run_prediction(code=code, language=language, top_k=int(top_k))17 18 label = result.label19 prob = f"{result.prob_ai:.4f}"20 21 groups = "\n".join(22 [f"{k}: {v:.4f}" for k, v in result.grouped_importance.items()]23 )24 25 shap_table = "\n".join(26 [27 f"{row['rank']}. {row['feature']} ({row['impact_str']}) → {row['pushes_toward']}"28 for row in result.shap_rows29 ]30 )31 32 explanation = result.explanation33 34 return label, prob, groups, shap_table + "\n\n" + explanation35 36 except Exception as e:37 return f"Error: {str(e)}", "", "", ""38 39 40with gr.Blocks(title="AI vs Human Code Classifier") as demo:41 42 gr.Markdown("# AI vs Human Code Classifier")43 gr.Markdown("Detect AI-generated vs human-written code using XGBoost + SHAP.")44 45 with gr.Row():46 47 with gr.Column():48 code = gr.Code(49 label="Paste Python or Java Code",50 language="python",51 lines=15,52 )53 54 language = gr.Dropdown(55 ["python", "java"],56 value="python",57 label="Programming Language",58 )59 60 top_k = gr.Slider(61 minimum=3,62 maximum=20,63 value=6,64 step=1,65 label="Top SHAP Features",66 )67 68 btn = gr.Button("Predict")69 70 with gr.Column():71 label = gr.Textbox(label="Prediction")72 prob = gr.Textbox(label="AI Probability")73 groups = gr.Textbox(label="Feature Groups")74 shap = gr.Textbox(label="SHAP Explanation", lines=10)75 76 btn.click(77 predict,78 inputs=[code, language, top_k],79 outputs=[label, prob, groups, shap],80 )81 82demo.launch(server_name="0.0.0.0", server_port=7860)