Pyefuri commited on
Commit
e23b077
·
verified ·
1 Parent(s): 8862c6c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -11
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import gradio as gr
2
  import torch
3
  import spaces
 
4
  from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
5
  from threading import Thread
6
 
@@ -16,30 +17,66 @@ model = AutoModelForCausalLM.from_pretrained(
16
  device_map="auto"
17
  )
18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  # Fungsi utama penerjemah dan chat yang memanfaatkan kekuatan penuh model Qwen di GPU
20
  @spaces.GPU
21
  def prediksi_terjemahan(message, history):
22
- # Mengubah instruksi dasar agar model Qwen bisa fleksibel mengobrol sekaligus menerjemahkan
 
 
 
 
 
 
23
  percakapan = [
24
  {
25
  "role": "system",
26
  "content": (
27
  "Kamu adalah asisten AI yang ramah dan ahli dalam Bahasa Indonesia dan Bahasa Biak. "
28
- "Jawablah sapaan dan pertanyaan umum pengguna dengan luwes. Jika pengguna meminta "
29
- "terjemahan ke Bahasa Biak, berikan hasil terjemahan yang akurat dan alami."
 
30
  )
31
  }
32
  ]
33
 
 
34
  if history:
35
  for interaksi in history:
36
- if isinstance(interaksi, (list, tuple)) and len(interaksi) == 2:
 
 
 
 
 
37
  human, assistant = interaksi
38
  if human:
39
  percakapan.append({"role": "user", "content": str(human)})
40
  if assistant:
41
  percakapan.append({"role": "assistant", "content": str(assistant)})
42
 
 
43
  percakapan.append({"role": "user", "content": message})
44
 
45
  input_text = tokenizer.apply_chat_template(
@@ -54,8 +91,8 @@ def prediksi_terjemahan(message, history):
54
  generation_kwargs = dict(
55
  **inputs,
56
  streamer=streamer,
57
- max_new_tokens=256, # Ditingkatkan ke 256 agar jawaban obrolan umum tidak terpotong tengah jalan
58
- temperature=0.5, # Menggunakan 0.5 agar AI bisa menjawab sapaan secara kreatif dan tidak kaku
59
  top_p=0.85,
60
  repetition_penalty=1.2,
61
  do_sample=True,
@@ -69,7 +106,8 @@ def prediksi_terjemahan(message, history):
69
  text_terjemahan = ""
70
  for new_text in streamer:
71
  text_terjemahan += new_text
72
- yield text_terjemahan.strip()
 
73
 
74
  # ========================================================
75
  # PERBAIKAN UI/UX: CUSTOM CSS PUSAT & RAPI (TIDAK MELEBAR)
@@ -87,16 +125,15 @@ desain_kustom_css = """
87
  }
88
  """
89
 
90
- with gr.Blocks() as demo:
91
  with gr.Column(elem_id="wadah-lebar-chat"):
92
  gr.Markdown("# 🤖 AI Bahasa Indonesia-Biak", elem_classes="judul-pusat")
93
  gr.ChatInterface(
94
  fn=prediksi_terjemahan,
95
-
96
  )
97
 
98
  if __name__ == "__main__":
99
  demo.launch(
100
- theme=gr.themes.Soft(),
101
- css=desain_kustom_css
102
  )
 
1
  import gradio as gr
2
  import torch
3
  import spaces
4
+ import re
5
  from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
6
  from threading import Thread
7
 
 
17
  device_map="auto"
18
  )
19
 
20
+ # Fungsi interseptor untuk mendeteksi sapaan awal dalam Bahasa Indonesia
21
+ def cek_sapaan_otomatis(message):
22
+ # Membersihkan teks dari tanda baca dan mengubah ke huruf kecil
23
+ teks_bersih = re.sub(r'[^\w\s]', '', message.strip().lower())
24
+
25
+ # Daftar kata sapaan dasar
26
+ kata_sapaan = ["halo", "selamat malam", "selamat pagi", "selamat siang", "selamat sore", "hai", "helo", "hi", "assalamualaikum"]
27
+
28
+ if teks_bersih in kata_sapaan:
29
+ if "malam" in teks_bersih:
30
+ return "Halo, selamat malam juga! Ada yang bisa saya bantu untuk diterjemahkan ke Bahasa Biak?"
31
+ elif "pagi" in teks_bersih:
32
+ return "Halo, selamat pagi juga! Ada yang bisa saya bantu hari ini?"
33
+ elif "siang" in teks_bersih:
34
+ return "Halo, selamat siang juga! Ada yang bisa saya bantu?"
35
+ elif "sore" in teks_bersih:
36
+ return "Halo, selamat sore juga! Ada yang bisa saya bantu?"
37
+ else:
38
+ return "Halo! Ada yang bisa saya bantu untuk diterjemahkan ke Bahasa Biak?"
39
+
40
+ return None
41
+
42
  # Fungsi utama penerjemah dan chat yang memanfaatkan kekuatan penuh model Qwen di GPU
43
  @spaces.GPU
44
  def prediksi_terjemahan(message, history):
45
+ # 1. Cek interseptor sapaan terlebih dahulu agar respon instan dan sesuai harapan
46
+ respon_sapaan = cek_sapaan_otomatis(message)
47
+ if respon_sapaan:
48
+ yield respon_sapaan
49
+ return
50
+
51
+ # 2. Jika bukan sapaan biasa, proses menggunakan Model Qwen2.5
52
  percakapan = [
53
  {
54
  "role": "system",
55
  "content": (
56
  "Kamu adalah asisten AI yang ramah dan ahli dalam Bahasa Indonesia dan Bahasa Biak. "
57
+ "Jawablah sapaan dan pertanyaan umum pengguna dengan luwes menggunakan Bahasa Indonesia. "
58
+ "Jika pengguna meminta terjemahan atau memasukkan kalimat Bahasa Indonesia untuk diartikan, "
59
+ "berikan hasil terjemahan ke Bahasa Biak yang akurat dan alami."
60
  )
61
  }
62
  ]
63
 
64
+ # Perbaikan pembacaan riwayat chat (mendukung format Gradio baru v4+)
65
  if history:
66
  for interaksi in history:
67
+ if isinstance(interaksi, dict): # Format Baru Gradio
68
+ role = interaksi.get("role")
69
+ content = interaksi.get("content")
70
+ if role and content:
71
+ percakapan.append({"role": role, "content": str(content)})
72
+ elif isinstance(interaksi, (list, tuple)) and len(interaksi) == 2: # Format Lama Gradio
73
  human, assistant = interaksi
74
  if human:
75
  percakapan.append({"role": "user", "content": str(human)})
76
  if assistant:
77
  percakapan.append({"role": "assistant", "content": str(assistant)})
78
 
79
+ # Masukkan pesan terbaru dari user
80
  percakapan.append({"role": "user", "content": message})
81
 
82
  input_text = tokenizer.apply_chat_template(
 
91
  generation_kwargs = dict(
92
  **inputs,
93
  streamer=streamer,
94
+ max_new_tokens=256,
95
+ temperature=0.4, # Sedikit diturunkan agar model lebih patuh pada instruksi System Prompt
96
  top_p=0.85,
97
  repetition_penalty=1.2,
98
  do_sample=True,
 
106
  text_terjemahan = ""
107
  for new_text in streamer:
108
  text_terjemahan += new_text
109
+ # Menghapus .strip() di loop agar spasi ketikan tidak terpotong di UI Gradio
110
+ yield text_terjemahan
111
 
112
  # ========================================================
113
  # PERBAIKAN UI/UX: CUSTOM CSS PUSAT & RAPI (TIDAK MELEBAR)
 
125
  }
126
  """
127
 
128
+ with gr.Blocks(css=desain_kustom_css) as demo:
129
  with gr.Column(elem_id="wadah-lebar-chat"):
130
  gr.Markdown("# 🤖 AI Bahasa Indonesia-Biak", elem_classes="judul-pusat")
131
  gr.ChatInterface(
132
  fn=prediksi_terjemahan,
133
+ type="messages" # Memastikan format riwayat chat Gradio stabil menggunakan struktur dictionary
134
  )
135
 
136
  if __name__ == "__main__":
137
  demo.launch(
138
+ theme=gr.themes.Soft()
 
139
  )