Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import torch | |
| from transformers import AutoTokenizer, AutoConfig | |
| from huggingface_hub import hf_hub_url | |
| import os | |
| # Impor kelas kustom Anda secara eksplisit | |
| from model import IndoBERTClassifier | |
| # --- Konfigurasi dan Pemuatan Model --- | |
| MODEL_ID = "Hydra-RKMI/KlikBERT" | |
| # Muat tokenizer dan config dari Hub | |
| config = AutoConfig.from_pretrained(MODEL_ID) | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) | |
| # Inisialisasi kelas kustom dan muat bobot dari Hub | |
| model = IndoBERTClassifier(config) | |
| model_path = hf_hub_url(repo_id=MODEL_ID, filename="pytorch_model.bin") | |
| model.load_state_dict(torch.hub.load_state_dict_from_url(model_path, map_location="cpu")) | |
| model.eval() | |
| # --- Pemetaan Label --- | |
| # Pastikan config.json Anda sudah menggunakan 'custom_id2label' | |
| id2label_clickbait = config.custom_id2label['clickbait'] | |
| id2label_kategori = config.custom_id2label['kategori'] | |
| # --- Fungsi Prediksi --- | |
| def predict(judul, isi): | |
| inputs = tokenizer( | |
| judul, | |
| isi, | |
| truncation=True, | |
| padding=True, | |
| max_length=512, | |
| return_tensors="pt" | |
| ) | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| clickbait_logits = outputs["clickbait_logits"] | |
| kategori_logits = outputs["kategori_logits"] | |
| pred_clickbait_id = torch.argmax(clickbait_logits, dim=1).item() | |
| pred_kategori_id = torch.argmax(kategori_logits, dim=1).item() | |
| pred_clickbait_label = id2label_clickbait[str(pred_clickbait_id)] | |
| pred_kategori_label = id2label_kategori[str(pred_kategori_id)] | |
| # --- PERUBAHAN DI SINI --- | |
| # Kembalikan dua nilai terpisah, bukan dictionary | |
| return pred_clickbait_label, pred_kategori_label | |
| # --- Antarmuka Gradio --- | |
| inputs = [ | |
| gr.Textbox(lines=2, label="Judul Berita", placeholder="Masukkan judul berita di sini..."), | |
| gr.Textbox(lines=10, label="Isi Berita", placeholder="Masukkan isi berita di sini...") | |
| ] | |
| # --- PERUBAHAN DI SINI --- | |
| # Gunakan dua komponen output terpisah | |
| outputs = [ | |
| gr.Text(label="Prediksi Clickbait"), | |
| gr.Text(label="Prediksi Kategori Berita") | |
| ] | |
| title = "Model Multi-Task KlikBERT" | |
| description = "Model ini memprediksi apakah judul clickbait dan apa kategori beritanya. Model ini dimuat dari repositori TrioF/KlikBERT." | |
| iface = gr.Interface(fn=predict, inputs=inputs, outputs=outputs, title=title, description=description) | |
| iface.launch() |