elselse's picture
Update app.py
a3c913e verified
import gradio as gr
import json
from transformers import pipeline
# Load Hugging Face model (text classification)
classifier = pipeline(
task="text-classification",
model="CIRCL/cwe-parent-vulnerability-classification-roberta-base",
return_all_scores=True
)
# Load child-to-parent mapping
with open("child_to_parent_mapping.json", "r") as f:
child_to_parent = json.load(f)
def predict_cwe(commit_message: str):
"""
Predict CWE(s) from a commit message and map to parent CWEs.
"""
results = classifier(commit_message)[0]
sorted_results = sorted(results, key=lambda x: x["score"], reverse=True)
# Map predictions to parent CWE (if available)
mapped_results = {}
for item in sorted_results[:5]:
child_cwe = item["label"].replace("CWE-", "")
parent_cwe = child_to_parent.get(child_cwe, child_cwe) # default to child if no parent
mapped_results[f"CWE-{parent_cwe}"] = round(float(item["score"]), 4)
return mapped_results
# Gradio UI
demo = gr.Interface(
fn=predict_cwe,
inputs=gr.Textbox(lines=3, placeholder="Enter your commit message or vulnerability description here..."),
outputs=gr.Label(num_top_classes=5),
title="CWE Prediction from Commit Message or Vulnerability Description",
description="This tool uses a fine-tuned model to predict CWE categories from Git commit messages and vulnerability descriptions. "
"Predicted child CWEs are mapped to their parent CWEs if applicable.",
examples=[
["A vulnerability has been found in cfire24 ajaxlife up to 0.3.2 and classified as problematic. This vulnerability affects unknown code. The manipulation leads to cross site scripting. The attack can be initiated remotely. Upgrading to version 0.3.3 is able to address this issue. "],
]
)
if __name__ == "__main__":
demo.launch()