modelAnevia / app.py
Wiefdw's picture
Update app.py
1a1c5c3 verified
Raw
History Blame Contribute Delete
3.07 kB
import gradio as gr
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
import os # <-- Tambahkan ini
# --- 1. Muat Model dan Tokenizer dari Hugging Face Hub ---
# Ganti dengan username dan nama repo Anda yang sudah di-fine-tune
MODEL_REPO = "Wiefdw/modelAnevia-v2"
# Ambil token dari Space Secrets (lebih aman!)
# Pastikan Anda sudah mengatur secret bernama "HF_TOKEN" di pengaturan Space Anda
HF_TOKEN = os.getenv("HF_TOKEN")
# Cek apakah token ditemukan
if not HF_TOKEN:
raise ValueError("Hugging Face token tidak ditemukan. Mohon atur 'HF_TOKEN' di Space Secrets.")
print(f"Memuat model dari: {MODEL_REPO}")
try:
tokenizer = AutoTokenizer.from_pretrained(MODEL_REPO, token=HF_TOKEN)
model = AutoModelForCausalLM.from_pretrained(MODEL_REPO, token=HF_TOKEN)
print("Model berhasil dimuat.")
except Exception as e:
print(f"Gagal memuat model. Pastikan nama repo dan token sudah benar. Error: {e}")
# Hentikan aplikasi jika model gagal dimuat
raise
# Pindahkan model ke GPU jika tersedia, untuk inferensi yang lebih cepat
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
print(f"Model berjalan di: {device}")
# --- 2. Fungsi untuk Menghasilkan Respon Chatbot ---
def generate_response(message, chat_history):
"""
Fungsi ini mengambil pesan pengguna dan riwayat obrolan,
lalu menghasilkan respons dari model.
"""
# Format ulang prompt dengan riwayat obrolan
prompt_history = ""
for user_input, bot_response in chat_history:
prompt_history += f"{user_input}{tokenizer.eos_token}{bot_response}{tokenizer.eos_token}"
# Gabungkan dengan pesan baru
prompt = f"{prompt_history}{message}{tokenizer.eos_token}"
# Tokenisasi prompt
inputs = tokenizer(prompt, return_tensors="pt", max_length=512, truncation=True).to(device)
# Hasilkan respons dari model
outputs = model.generate(
**inputs,
max_new_tokens=100,
pad_token_id=tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample=True,
top_k=50,
top_p=0.95,
temperature=0.7
)
# Decode hanya token yang baru dihasilkan
new_tokens = outputs[0, inputs['input_ids'].shape[-1]:]
bot_response = tokenizer.decode(new_tokens, skip_special_tokens=True)
# Tambahkan penanganan jika respons kosong
return bot_response if bot_response else "Maaf, saya tidak bisa merespons saat ini."
# --- 3. Buat Antarmuka Gradio ---
chatbot_interface = gr.ChatInterface(
fn=generate_response,
title="🩺 Chatbot Informasi Anemia",
description="Tanyakan apa saja tentang anemia. Model ini di-fine-tune dari DialoGPT-medium.",
examples=[
["Apa itu anemia?"],
["Makanan apa yang baik untuk penderita anemia?"],
["Apakah anemia bisa sembuh?"]
],
theme="soft",
retry_btn=None,
undo_btn="Hapus Pesan Terakhir",
clear_btn="Bersihkan Obrolan",
)
# --- 4. Jalankan Aplikasi ---
if __name__ == "__main__":
chatbot_interface.launch()