Spaces:
Running
Running
import gradio as gr | |
from transformers import AutoTokenizer | |
import torch | |
import matplotlib.pyplot as plt | |
from model import EnergySmellsDetector | |
from config import SMELLS, BEST_THRESHOLD | |
TOKENIZER = "microsoft/graphcodebert-base" | |
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER) | |
model = EnergySmellsDetector.load_model_from_hf() | |
def get_predictions(code_snippet): | |
inputs = tokenizer(code_snippet, return_tensors="pt", truncation=True) | |
with torch.no_grad(): | |
probs = model(**inputs)[0].cpu().numpy().flatten() # Model output is already sigmoid applied | |
rounded_logits = (probs > BEST_THRESHOLD).astype(int) | |
# Prepare results in a dictionary | |
results = {label: {"Detected": bool(pred), "Confidence": round(prob * 100, 2)} | |
for label, pred, prob in zip(SMELLS, rounded_logits, probs)} | |
return results, plot_bar_chart(results) | |
def plot_bar_chart(results): | |
labels = list(results.keys()) | |
confidences = [results[label]["Confidence"] for label in labels] | |
plt.figure(figsize=(8, 4)) | |
plt.barh(labels, confidences, color=['green' if results[label]["Detected"] else 'red' for label in labels]) | |
plt.xlabel("Confidence (%)") | |
plt.xlim(0, 100) | |
plt.title(f"Energy Smells Probabilities - Threshold: {BEST_THRESHOLD}") | |
plt.gca().invert_yaxis() # Invert y-axis for better readability | |
plt.tight_layout() | |
img_path = "confidence_chart.png" | |
plt.savefig(img_path) | |
plt.close() | |
return img_path | |
textbox = gr.Textbox(label="Enter your code snippet", placeholder="Paste your code here...") | |
title = "Energy Smells Detector" | |
description = "Analyze your code for potential energy smells. The model detects 9 different energy inefficiencies in your code." | |
gr.Interface( | |
title=title, | |
description=description, | |
inputs=textbox, | |
fn=get_predictions, | |
outputs=[ | |
gr.Json(label="Detection Results"), | |
gr.Image(label="Confidence Bar Chart") | |
], | |
).launch() | |