Update app.py
Browse files
app.py
CHANGED
|
@@ -17,23 +17,34 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
| 17 |
device_map="auto"
|
| 18 |
)
|
| 19 |
|
| 20 |
-
#
|
|
|
|
|
|
|
| 21 |
def cek_sapaan_otomatis(message):
|
|
|
|
| 22 |
teks_bersih = re.sub(r'[^\w\s]', '', message.strip().lower())
|
| 23 |
-
kata_sapaan = ["halo", "selamat malam", "selamat pagi", "selamat siang", "selamat sore", "hai", "helo", "hi", "assalamualaikum"]
|
| 24 |
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
return None
|
| 38 |
|
| 39 |
# Fungsi utama penerjemah dan chat di GPU
|
|
@@ -48,10 +59,10 @@ def prediksi_terjemahan(message, history):
|
|
| 48 |
{
|
| 49 |
"role": "system",
|
| 50 |
"content": (
|
| 51 |
-
"Kamu adalah asisten AI yang ramah
|
| 52 |
-
"
|
| 53 |
-
"Jika pengguna
|
| 54 |
-
"
|
| 55 |
)
|
| 56 |
}
|
| 57 |
]
|
|
@@ -82,13 +93,16 @@ def prediksi_terjemahan(message, history):
|
|
| 82 |
inputs = tokenizer([input_text], return_tensors="pt").to(model.device)
|
| 83 |
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
|
| 84 |
|
|
|
|
|
|
|
|
|
|
| 85 |
generation_kwargs = dict(
|
| 86 |
**inputs,
|
| 87 |
streamer=streamer,
|
| 88 |
max_new_tokens=256,
|
| 89 |
-
temperature=0.
|
| 90 |
-
top_p=0.
|
| 91 |
-
repetition_penalty=1.
|
| 92 |
do_sample=True,
|
| 93 |
eos_token_id=tokenizer.eos_token_id,
|
| 94 |
pad_token_id=tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
|
|
@@ -118,13 +132,11 @@ desain_kustom_css = """
|
|
| 118 |
}
|
| 119 |
"""
|
| 120 |
|
| 121 |
-
# Perbaikan Gradio 6.0: Parameter css dipindahkan dari gr.Blocks ke demo.launch
|
| 122 |
with gr.Blocks() as demo:
|
| 123 |
with gr.Column(elem_id="wadah-lebar-chat"):
|
| 124 |
gr.Markdown("# 🤖 AI Bahasa Indonesia-Biak", elem_classes="judul-pusat")
|
| 125 |
gr.ChatInterface(
|
| 126 |
fn=prediksi_terjemahan
|
| 127 |
-
# Perbaikan Gradio 6.0: Menghapus argumen type="messages"
|
| 128 |
)
|
| 129 |
|
| 130 |
if __name__ == "__main__":
|
|
|
|
| 17 |
device_map="auto"
|
| 18 |
)
|
| 19 |
|
| 20 |
+
# =====================================================================
|
| 21 |
+
# MODIFIKASI 1: Fungsi interseptor sapaan yang lebih fleksibel (Regex)
|
| 22 |
+
# =====================================================================
|
| 23 |
def cek_sapaan_otomatis(message):
|
| 24 |
+
# Menghapus tanda baca dan mengubah ke huruf kecil
|
| 25 |
teks_bersih = re.sub(r'[^\w\s]', '', message.strip().lower())
|
|
|
|
| 26 |
|
| 27 |
+
# Deteksi variasi sapaan dasar secara parsial (termasuk salah ketik seperti hala/helo)
|
| 28 |
+
apakah_menyapa = any(kata in teks_bersih for kata in ["halo", "hala", "hai", "helo", "hi", "p "])
|
| 29 |
+
|
| 30 |
+
# Deteksi waktu
|
| 31 |
+
apakah_malam = "malam" in teks_bersih
|
| 32 |
+
apakah_pagi = "pagi" in teks_bersih
|
| 33 |
+
apakah_siang = "siang" in teks_bersih
|
| 34 |
+
apakah_sore = "sore" in teks_bersih
|
| 35 |
+
|
| 36 |
+
# Logika penentu respon instan Bahasa Indonesia
|
| 37 |
+
if apakah_malam or (apakah_menyapa and apakah_malam):
|
| 38 |
+
return "Halo, selamat malam juga! Ada yang bisa saya bantu untuk diterjemahkan ke Bahasa Biak?"
|
| 39 |
+
elif apakah_pagi or (apakah_menyapa and apakah_pagi):
|
| 40 |
+
return "Halo, selamat pagi juga! Ada yang bisa saya bantu hari ini?"
|
| 41 |
+
elif apakah_siang or (apakah_menyapa and apakah_siang):
|
| 42 |
+
return "Halo, selamat siang juga! Ada yang bisa saya bantu?"
|
| 43 |
+
elif apakah_sore or (apakah_menyapa and apakah_sore):
|
| 44 |
+
return "Halo, selamat sore juga! Ada yang bisa saya bantu?"
|
| 45 |
+
elif apakah_menyapa or teks_bersih == "p":
|
| 46 |
+
return "Halo! Ada yang bisa saya bantu untuk diterjemahkan ke Bahasa Biak?"
|
| 47 |
+
|
| 48 |
return None
|
| 49 |
|
| 50 |
# Fungsi utama penerjemah dan chat di GPU
|
|
|
|
| 59 |
{
|
| 60 |
"role": "system",
|
| 61 |
"content": (
|
| 62 |
+
"Kamu adalah asisten AI yang ramah. Kamu menguasai Bahasa Indonesia dan Bahasa Biak. "
|
| 63 |
+
"Aturan interaksi:\n"
|
| 64 |
+
"1. Jika pengguna menyapa (seperti 'halo', 'selamat malam') atau bertanya umum, balaslah dengan ramah menggunakan Bahasa Indonesia.\n"
|
| 65 |
+
"2. Jika pengguna meminta terjemahan atau memasukkan kalimat untuk diartikan ke Bahasa Biak, berikan hasil terjemahan yang akurat."
|
| 66 |
)
|
| 67 |
}
|
| 68 |
]
|
|
|
|
| 93 |
inputs = tokenizer([input_text], return_tensors="pt").to(model.device)
|
| 94 |
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
|
| 95 |
|
| 96 |
+
# =====================================================================
|
| 97 |
+
# MODIFIKASI 2: Penyesuaian hyperparameter agar Qwen lebih luwes chitchat
|
| 98 |
+
# =====================================================================
|
| 99 |
generation_kwargs = dict(
|
| 100 |
**inputs,
|
| 101 |
streamer=streamer,
|
| 102 |
max_new_tokens=256,
|
| 103 |
+
temperature=0.6, # Diubah ke 0.6 agar tidak terlalu kaku saat mengobrol biasa
|
| 104 |
+
top_p=0.9, # Diubah ke 0.9 untuk memberikan variasi kosakata dasar yang lebih natural
|
| 105 |
+
repetition_penalty=1.1, # Diturunkan ke 1.1 agar kalimat mengalir lebih baik
|
| 106 |
do_sample=True,
|
| 107 |
eos_token_id=tokenizer.eos_token_id,
|
| 108 |
pad_token_id=tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
|
|
|
|
| 132 |
}
|
| 133 |
"""
|
| 134 |
|
|
|
|
| 135 |
with gr.Blocks() as demo:
|
| 136 |
with gr.Column(elem_id="wadah-lebar-chat"):
|
| 137 |
gr.Markdown("# 🤖 AI Bahasa Indonesia-Biak", elem_classes="judul-pusat")
|
| 138 |
gr.ChatInterface(
|
| 139 |
fn=prediksi_terjemahan
|
|
|
|
| 140 |
)
|
| 141 |
|
| 142 |
if __name__ == "__main__":
|