Pyefuri commited on
Commit
321de1f
·
verified ·
1 Parent(s): e23b077

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -17
app.py CHANGED
@@ -19,10 +19,7 @@ model = AutoModelForCausalLM.from_pretrained(
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:
@@ -39,16 +36,14 @@ def cek_sapaan_otomatis(message):
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",
@@ -61,22 +56,21 @@ def prediksi_terjemahan(message, history):
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(
@@ -92,7 +86,7 @@ def prediksi_terjemahan(message, history):
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,11 +100,10 @@ def prediksi_terjemahan(message, history):
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)
114
  # ========================================================
115
  desain_kustom_css = """
116
  #wadah-lebar-chat {
@@ -125,15 +118,17 @@ desain_kustom_css = """
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
  )
 
19
 
20
  # Fungsi interseptor untuk mendeteksi sapaan awal dalam Bahasa Indonesia
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
  if teks_bersih in kata_sapaan:
 
36
 
37
  return None
38
 
39
+ # Fungsi utama penerjemah dan chat di GPU
40
  @spaces.GPU
41
  def prediksi_terjemahan(message, history):
 
42
  respon_sapaan = cek_sapaan_otomatis(message)
43
  if respon_sapaan:
44
  yield respon_sapaan
45
  return
46
 
 
47
  percakapan = [
48
  {
49
  "role": "system",
 
56
  }
57
  ]
58
 
59
+ # Memproses history format Gradio 6.0 (List of Dictionaries)
60
  if history:
61
  for interaksi in history:
62
+ if isinstance(interaksi, dict):
63
  role = interaksi.get("role")
64
  content = interaksi.get("content")
65
  if role and content:
66
  percakapan.append({"role": role, "content": str(content)})
67
+ elif isinstance(interaksi, (list, tuple)) and len(interaksi) == 2:
68
  human, assistant = interaksi
69
  if human:
70
  percakapan.append({"role": "user", "content": str(human)})
71
  if assistant:
72
  percakapan.append({"role": "assistant", "content": str(assistant)})
73
 
 
74
  percakapan.append({"role": "user", "content": message})
75
 
76
  input_text = tokenizer.apply_chat_template(
 
86
  **inputs,
87
  streamer=streamer,
88
  max_new_tokens=256,
89
+ temperature=0.4,
90
  top_p=0.85,
91
  repetition_penalty=1.2,
92
  do_sample=True,
 
100
  text_terjemahan = ""
101
  for new_text in streamer:
102
  text_terjemahan += new_text
 
103
  yield text_terjemahan
104
 
105
  # ========================================================
106
+ # UI/UX CONFIGURATION (COMPATIBLE WITH GRADIO 6.0)
107
  # ========================================================
108
  desain_kustom_css = """
109
  #wadah-lebar-chat {
 
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__":
131
  demo.launch(
132
+ theme=gr.themes.Soft(),
133
+ css=desain_kustom_css
134
  )