Pyefuri commited on
Commit
362ed33
·
verified ·
1 Parent(s): b65edd1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -28
app.py CHANGED
@@ -1,7 +1,8 @@
1
  import gradio as gr
2
  import torch
3
  import spaces
4
- from transformers import AutoModelForCausalLM, AutoTokenizer
 
5
 
6
  model_name = "Pyefuri/Qwen2.5-3B-Bahasa-Biak-Final"
7
 
@@ -9,7 +10,6 @@ print("Memuat tokenizer...")
9
  tokenizer = AutoTokenizer.from_pretrained(model_name)
10
 
11
  print("Memuat model Bahasa Biak...")
12
- # Mengembalikan argumen ke 'dtype' sesuai warning log transformers Anda agar tidak deprecated
13
  model = AutoModelForCausalLM.from_pretrained(
14
  model_name,
15
  dtype=torch.float16,
@@ -48,10 +48,13 @@ def prediksi_terjemahan(message, history):
48
  )
49
 
50
  inputs = tokenizer([input_text], return_tensors="pt").to(model.device)
51
- input_len = inputs.input_ids.shape
 
 
52
 
53
  generation_kwargs = dict(
54
  **inputs,
 
55
  max_new_tokens=128,
56
  temperature=0.4,
57
  top_p=0.85,
@@ -61,51 +64,37 @@ def prediksi_terjemahan(message, history):
61
  pad_token_id=tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
62
  )
63
 
64
- with torch.no_grad():
65
- generated_tokens = inputs.input_ids
66
- for _ in range(generation_kwargs["max_new_tokens"]):
67
- outputs = model(**{"input_ids": generated_tokens})
68
- next_token_logits = outputs.logits[:, -1, :]
69
-
70
- if generation_kwargs["do_sample"]:
71
- next_token_logits = next_token_logits / generation_kwargs["temperature"]
72
- probs = torch.softmax(next_token_logits, dim=-1)
73
- next_token = torch.multinomial(probs, num_samples=1)
74
- else:
75
- next_token = torch.argmax(next_token_logits, dim=-1, keepdim=True)
76
-
77
- generated_tokens = torch.cat([generated_tokens, next_token], dim=-1)
78
- text_terjemahan = tokenizer.decode(generated_tokens[input_len:], skip_special_tokens=True)
79
-
80
- yield text_terjemahan.strip()
81
-
82
- if next_token.item() == generation_kwargs["eos_token_id"]:
83
- break
84
 
85
  # ==========================================
86
  # STRUKTUR DESAIN CUSTOM CSS
87
  # ==========================================
88
  desain_kustom_css = """
89
  #wadah-lebar-chat {
90
- max-width: 800px !important; /* Membatasi lebar agar pas seperti ChatGPT */
91
  margin: 0 auto !important; /* Menjaga posisi tetap presisi di tengah layar */
92
  float: none !important;
93
  }
94
  """
95
 
96
- # Membuka Blocks tanpa menyelipkan theme/css langsung di sini agar lolos dari Warning Gradio
97
  with gr.Blocks() as demo:
98
  gr.Markdown("# 🤖 AI Bahasa Indonesia-Biak")
99
 
100
- # Solusi: Membungkus ChatInterface ke dalam gr.Column yang mendukung penuh elem_id
101
  with gr.Column(elem_id="wadah-lebar-chat"):
102
  gr.ChatInterface(
103
  fn=prediksi_terjemahan,
104
-
105
  )
106
 
107
  if __name__ == "__main__":
108
- # PERBAIKAN: Memindahkan pengaturan tema dan CSS ke fungsi .launch() sesuai standarisasi sistem Gradio
109
  demo.launch(
110
  theme=gr.themes.Soft(),
111
  css=desain_kustom_css
 
1
  import gradio as gr
2
  import torch
3
  import spaces
4
+ from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
5
+ from threading import Thread
6
 
7
  model_name = "Pyefuri/Qwen2.5-3B-Bahasa-Biak-Final"
8
 
 
10
  tokenizer = AutoTokenizer.from_pretrained(model_name)
11
 
12
  print("Memuat model Bahasa Biak...")
 
13
  model = AutoModelForCausalLM.from_pretrained(
14
  model_name,
15
  dtype=torch.float16,
 
48
  )
49
 
50
  inputs = tokenizer([input_text], return_tensors="pt").to(model.device)
51
+
52
+ # SOLUSI PERMANEN: Menggunakan Streamer bawaan Hugging Face untuk menangani teks mengalir
53
+ streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
54
 
55
  generation_kwargs = dict(
56
  **inputs,
57
+ streamer=streamer, # Menyuntikkan fungsi pengalir teks otomatis
58
  max_new_tokens=128,
59
  temperature=0.4,
60
  top_p=0.85,
 
64
  pad_token_id=tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
65
  )
66
 
67
+ # Menjalankan proses generasi AI di latar belakang (Thread) agar UI web tidak macet
68
+ thread = Thread(target=model.generate, kwargs=generation_kwargs)
69
+ thread.start()
70
+
71
+ # Menangkap kata demi kata yang keluar dari streamer dan mengirimkannya langsung ke UI
72
+ text_terjemahan = ""
73
+ for new_text in streamer:
74
+ text_terjemahan += new_text
75
+ yield text_terjemahan.strip()
 
 
 
 
 
 
 
 
 
 
 
76
 
77
  # ==========================================
78
  # STRUKTUR DESAIN CUSTOM CSS
79
  # ==========================================
80
  desain_kustom_css = """
81
  #wadah-lebar-chat {
82
+ max-width: 800px !important; /* Membatasi lebar agar pas di tengah seperti ChatGPT */
83
  margin: 0 auto !important; /* Menjaga posisi tetap presisi di tengah layar */
84
  float: none !important;
85
  }
86
  """
87
 
 
88
  with gr.Blocks() as demo:
89
  gr.Markdown("# 🤖 AI Bahasa Indonesia-Biak")
90
 
 
91
  with gr.Column(elem_id="wadah-lebar-chat"):
92
  gr.ChatInterface(
93
  fn=prediksi_terjemahan,
94
+
95
  )
96
 
97
  if __name__ == "__main__":
 
98
  demo.launch(
99
  theme=gr.themes.Soft(),
100
  css=desain_kustom_css