MGTD-Demo / app.py
minemaster01's picture
Create app.py
49b1ef8 verified
raw
history blame
2.2 kB
import gradio as gr
import datetime
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from datasets import load_dataset, Dataset, DatasetDict
import huggingface_hub
import pandas as pd
# CONFIG
MODEL_NAME = "distilbert-base-uncased-finetuned-sst-2-english" # replace with your own
HF_DATASET_REPO = "your-username/your-logging-dataset" # create on HF Hub
HF_TOKEN = "hf_..." # your Hugging Face token with write access
# Load model + tokenizer
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
# Setup dataset pushing
huggingface_hub.login(token=HF_TOKEN)
# Store session logs
log_entries = []
def infer_and_log(text_input):
inputs = tokenizer(text_input, return_tensors="pt", truncation=True)
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits.tolist()
predicted = torch.argmax(outputs.logits, dim=-1).item()
output_label = model.config.id2label[predicted]
# Create log entry
log_entries.append({
"timestamp": datetime.datetime.now().isoformat(),
"input": text_input,
"logits": logits,
})
return output_label
def clear_fields():
return "", ""
def save_to_hf():
if not log_entries:
return "Nothing to save."
dataset = Dataset.from_pandas(pd.DataFrame(log_entries))
dataset.push_to_hub(HF_DATASET_REPO)
log_entries.clear()
return "Data saved to Hugging Face!"
with gr.Blocks() as demo:
gr.Markdown("### 🔤 Text Classification Demo")
with gr.Row():
input_box = gr.Textbox(label="Input Text", lines=5, interactive=True)
output_box = gr.Textbox(label="Predicted Label", lines=5)
with gr.Row():
submit_btn = gr.Button("Submit")
clear_btn = gr.Button("Clear")
status_box = gr.Textbox(label="Status", interactive=False)
submit_btn.click(fn=infer_and_log, inputs=input_box, outputs=output_box)
clear_btn.click(fn=clear_fields, outputs=[input_box, output_box])
gr.Button("Save Logs to Hub").click(fn=save_to_hf, outputs=status_box)
if __name__ == "__main__":
demo.launch()