Pyefuri commited on
Commit
eb91f61
·
verified ·
1 Parent(s): 1a2f510

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -7
app.py CHANGED
@@ -17,19 +17,17 @@ model = AutoModelForCausalLM.from_pretrained(
17
 
18
  @spaces.GPU
19
  def prediksi_terjemahan(message, history):
20
- # 1. Menentukan instruksi dasar penerjemah
21
  percakapan = [
22
  {"role": "system", "content": "Kamu adalah asisten AI penerjemah yang ahli. Tugasmu adalah menerjemahkan teks dari Bahasa Indonesia ke Bahasa Biak secara akurat, alami, ringkas, dan langsung tanpa pengulangan kata."}
23
  ]
24
 
25
- # 2. Solusi Unpack Error: Membaca riwayat pesan dengan aman menggunakan format kamus Gradio terbaru
26
  for pesan_lama in history:
27
  percakapan.append({
28
  "role": pesan_lama.get("role", "user"),
29
  "content": str(pesan_lama.get("content", ""))
30
  })
31
 
32
- # 3. Menambahkan prompt input kalimat baru dari pengguna
33
  prompt_penerjemahan = f"Terjemahkan kalimat berikut ke dalam Bahasa Biak: {message}"
34
  percakapan.append({"role": "user", "content": prompt_penerjemahan})
35
 
@@ -47,7 +45,57 @@ def prediksi_terjemahan(message, history):
47
  max_new_tokens=128,
48
  temperature=0.1,
49
  top_p=0.85,
50
- repetition_penalty=1.2, # Mengunci token agar model tidak looping kalimat
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  do_sample=True,
52
  eos_token_id=tokenizer.eos_token_id,
53
  pad_token_id=tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
@@ -59,13 +107,36 @@ def prediksi_terjemahan(message, history):
59
 
60
  respons = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
61
 
62
- # 4. Solusi TypeError: Mengambil indeks ke-0 agar mengeluarkan teks murni string, bukan list Python
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  if respons and len(respons) > 0:
64
- return str(respons[0]).strip()
65
 
66
  return "Maaf, terjadi kesalahan saat memproses terjemahan."
67
 
68
- # 5. Membangun antarmuka chat dengan parameter 'messages' untuk Gradio versi baru
69
  demo = gr.ChatInterface(
70
  fn=prediksi_terjemahan,
71
  type="messages",
 
17
 
18
  @spaces.GPU
19
  def prediksi_terjemahan(message, history):
 
20
  percakapan = [
21
  {"role": "system", "content": "Kamu adalah asisten AI penerjemah yang ahli. Tugasmu adalah menerjemahkan teks dari Bahasa Indonesia ke Bahasa Biak secara akurat, alami, ringkas, dan langsung tanpa pengulangan kata."}
22
  ]
23
 
24
+ # Memproses history percakapan dengan format kamus Gradio terbaru
25
  for pesan_lama in history:
26
  percakapan.append({
27
  "role": pesan_lama.get("role", "user"),
28
  "content": str(pesan_lama.get("content", ""))
29
  })
30
 
 
31
  prompt_penerjemahan = f"Terjemahkan kalimat berikut ke dalam Bahasa Biak: {message}"
32
  percakapan.append({"role": "user", "content": prompt_penerjemahan})
33
 
 
45
  max_new_tokens=128,
46
  temperature=0.1,
47
  top_p=0.85,
48
+ repetition_penalty=1.2,
49
+ do_sample=True,
50
+ eos_token_id=tokenizer.eos_token_id,
51
+ import gradio as gr
52
+ import torch
53
+ import spaces
54
+ from transformers import AutoModelForCausalLM, AutoTokenizer
55
+
56
+ model_name = "Pyefuri/Qwen2.5-3B-Bahasa-Biak-Final"
57
+
58
+ print("Memuat tokenizer...")
59
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
60
+
61
+ print("Memuat model Bahasa Biak...")
62
+ model = AutoModelForCausalLM.from_pretrained(
63
+ model_name,
64
+ dtype=torch.float16,
65
+ device_map="auto"
66
+ )
67
+
68
+ @spaces.GPU
69
+ def prediksi_terjemahan(message, history):
70
+ percakapan = [
71
+ {"role": "system", "content": "Kamu adalah asisten AI penerjemah yang ahli. Tugasmu adalah menerjemahkan teks dari Bahasa Indonesia ke Bahasa Biak secara akurat, alami, ringkas, dan langsung tanpa pengulangan kata."}
72
+ ]
73
+
74
+ # Memproses history percakapan dengan format kamus Gradio terbaru
75
+ for pesan_lama in history:
76
+ percakapan.append({
77
+ "role": pesan_lama.get("role", "user"),
78
+ "content": str(pesan_lama.get("content", ""))
79
+ })
80
+
81
+ prompt_penerjemahan = f"Terjemahkan kalimat berikut ke dalam Bahasa Biak: {message}"
82
+ percakapan.append({"role": "user", "content": prompt_penerjemahan})
83
+
84
+ input_text = tokenizer.apply_chat_template(
85
+ percakapan,
86
+ tokenize=False,
87
+ add_generation_prompt=True
88
+ )
89
+
90
+ inputs = tokenizer([input_text], return_tensors="pt").to(model.device)
91
+
92
+ with torch.no_grad():
93
+ generated_ids = model.generate(
94
+ **inputs,
95
+ max_new_tokens=128,
96
+ temperature=0.1,
97
+ top_p=0.85,
98
+ repetition_penalty=1.2,
99
  do_sample=True,
100
  eos_token_id=tokenizer.eos_token_id,
101
  pad_token_id=tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
 
107
 
108
  respons = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
109
 
110
+ # PERBAIKAN INTI: Mengambil indeks ke-0 secara langsung agar murni teks string
111
+ if respons and len(respons) > 0:
112
+ return respons[0].strip()
113
+
114
+ return "Maaf, terjadi kesalahan saat memproses terjemahan."
115
+
116
+ demo = gr.ChatInterface(
117
+ fn=prediksi_terjemahan,
118
+ type="messages",
119
+ title="🤖 AI Bahasa Indonesia-Biak",
120
+ description="Silakan masukkan kalimat dalam Bahasa Indonesia untuk diterjemahkan ke dalam Bahasa Biak."
121
+ )
122
+
123
+ if __name__ == "__main__":
124
+ demo.launch()
125
+ pad_token_id=tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
126
+ )
127
+
128
+ generated_ids = [
129
+ output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, generated_ids)
130
+ ]
131
+
132
+ respons = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
133
+
134
+ # PERBAIKAN INTI: Mengambil indeks ke-0 secara langsung agar murni teks string
135
  if respons and len(respons) > 0:
136
+ return respons[0].strip()
137
 
138
  return "Maaf, terjadi kesalahan saat memproses terjemahan."
139
 
 
140
  demo = gr.ChatInterface(
141
  fn=prediksi_terjemahan,
142
  type="messages",