FarelDeveloper commited on
Commit
1af2711
·
verified ·
1 Parent(s): b689bc8

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +68 -0
app.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as ui
2
+ import torch
3
+ from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
4
+ from threading import Thread
5
+
6
+ # Gunakan varian Instruct agar nyambung diajak chat (bisa switch thinking mode!)
7
+ model_id = "Qwen/Qwen3-0.6B-Instruct"
8
+
9
+ print("Memuat Tokenizer & Model Qwen3-0.6B ke RAM...")
10
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
11
+ model = AutoModelForCausalLM.from_pretrained(
12
+ model_id,
13
+ torch_dtype=torch.float32, # float32 aman & stabil untuk CPU gratisan
14
+ device_map="cpu"
15
+ )
16
+ print("Qwen3 Siap Beraksi!")
17
+
18
+ def chat_qwen(message, history):
19
+ # Menyusun struktur chat history
20
+ conversation = []
21
+
22
+ # Masukkan history chat sebelumnya jika ada
23
+ for user_msg, ai_msg in history:
24
+ conversation.append({"role": "user", "content": user_msg})
25
+ conversation.append({"role": "assistant", "content": ai_msg})
26
+
27
+ # Masukkan prompt baru dari user
28
+ # Tips: Tambahkan "/think" di awal prompt jika ingin mengaktifkan mode berpikir ala DeepSeek-R1
29
+ conversation.append({"role": "user", "content": message})
30
+
31
+ # Convert ke format template chat Qwen
32
+ input_ids = tokenizer.apply_chat_template(
33
+ conversation,
34
+ tokenize=True,
35
+ add_generation_prompt=True,
36
+ return_tensors="pt"
37
+ ).to("cpu")
38
+
39
+ # Menggunakan Streamer biar teksnya muncul ngetik satu-satu (gak kaku)
40
+ streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
41
+
42
+ generation_kwargs = dict(
43
+ input_ids=input_ids,
44
+ streamer=streamer,
45
+ max_new_tokens=512,
46
+ temperature=0.6,
47
+ top_p=0.95
48
+ )
49
+
50
+ # Jalankan generasi teks di thread terpisah agar UI Gradio gak freeze
51
+ thread = Thread(target=model.generate, kwargs=generation_kwargs)
52
+ thread.start()
53
+
54
+ partial_text = ""
55
+ for new_text in streamer:
56
+ partial_text += new_text
57
+ yield partial_text
58
+
59
+ # Bikin UI Chatbot yang modern pake Gradio
60
+ demo = ui.ChatInterface(
61
+ fn=chat_qwen,
62
+ title="🤖 Qwen3-0.6B Chatbot (CPU Space)",
63
+ description="Berjalan lancar di HF Space Gratisan tanpa GPU. Tips: Ketik '/think' di awal pertanyaanmu untuk mengaktifkan Mode Berpikir!",
64
+ theme="soft"
65
+ )
66
+
67
+ if __name__ == "__main__":
68
+ demo.launch()