Team Ai
Apppublic

joshnavip/ai-code-detection

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
inference.py130 linesDownload Raw Back to classifier
1import sys2import os3 4PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))5sys.path.append(PROJECT_ROOT)6 7import numpy as np8import pandas as pd9import xgboost as xgb10 11# -------------------------------12# IMPORT FEATURE EXTRACTORS13# -------------------------------14from featureextraction.step1_statistical_extraction.step1_statistical_extraction import extract_features as extract_stat15from featureextraction.step2_ast_extraction.step2_ast_extraction import extract_ast_features16from featureextraction.step3_stylometry_extraction.step3_stylometry_extraction import extract_stylometry_features17from featureextraction.semantic_features.unixcoder_embedding import get_unixcoder_embedding18 19# XAI modules20from xai.shaplayer import shap_explain21from xai.grouping import group_shap_explanations22from xai.text_explainer import generate_text_explanation23 24# -------------------------------25# LOAD MODEL26# -------------------------------27model = xgb.XGBClassifier()28model.load_model("classifier/xgboost_final_model.json")29 30# -------------------------------31# LANGUAGE ONE-HOT32# -------------------------------33def encode_language(language):34    language = language.lower()35    if language == "python":36        return np.array([1, 0])37    elif language == "java":38        return np.array([0, 1])39    else:40        raise ValueError("Language must be python or java")41 42# -------------------------------43# BUILD FEATURES FROM CODE44# -------------------------------45def build_features_from_code(code, language):46 47    df = pd.DataFrame({48        "normalized_code": [code],49        "Language": [language]50    })51 52    stat_df = extract_stat(df)53    ast_df = extract_ast_features(df)54    style_df = extract_stylometry_features(df)55 56    X_stat = stat_df.drop(columns=["language"]).values.flatten()57    X_ast = ast_df.values.flatten()58    X_style = style_df.values.flatten()59    X_lang = encode_language(language)60    X_sem = get_unixcoder_embedding(code)61 62    X_final = np.hstack([63        X_stat,64        X_ast,65        X_style,66        X_lang,67        X_sem68    ]).reshape(1, -1)69 70    return X_final71 72# -------------------------------73# BASIC PREDICT FUNCTION74# -------------------------------75def predict_from_features(X_final):76    prediction = model.predict(X_final)[0]77    probability = model.predict_proba(X_final)[0][1]78    label_name = "AI" if prediction == 1 else "Human"79    return label_name, probability80 81# -------------------------------82# INTERACTIVE CLI83# -------------------------------84if __name__ == "__main__":85 86    print("\n======================================")87    print("  AI vs Human Code Classification")88    print("======================================")89 90    language = input("Choose language (python/java): ").strip().lower()91 92    print("\nPaste your code below.")93    print("Type 'END' on a new line when finished.\n")94 95    lines = []96    while True:97        line = input()98        if line.strip() == "END":99            break100        lines.append(line)101 102    code_input = "\n".join(lines)103 104    # build features105    X_final = build_features_from_code(code_input, language)106 107    # predict108    label, prob = predict_from_features(X_final)109 110    # shap111    shap_result = shap_explain(model, X_final)112 113    # grouping114    grouped = group_shap_explanations(shap_result)115 116    # text explanation117    text_reason = generate_text_explanation(grouped, label, prob)118 119    print("\n========== RESULT ==========")120    print("Prediction :", label)121    print("Confidence :", prob)122 123    print("\nTop SHAP features:")124    for e in shap_result:125        print(f"Feature {e['feature_index']} → {e['impact']} ({e['pushes_toward']})")126 127    print("\nGrouped SHAP importance:", grouped)128 129    print("\nExplanation:\n")130    print(text_reason)