NV9523 commited on
Commit
c5e49f7
·
verified ·
1 Parent(s): 19a7143

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -55
app.py CHANGED
@@ -1,64 +1,51 @@
1
- import subprocess
2
- import sys
3
-
4
- # Cài đặt các thư viện nếu chưa có
5
- subprocess.check_call([sys.executable, "-m", "pip", "install", "transformers", "streamlit", "torch", "bitsandbytes","peft"])
6
-
7
- import torch
8
- from transformers import AutoTokenizer, AutoModelForCausalLM
9
- from peft import PeftModel
10
  import streamlit as st
 
 
 
11
 
12
- # 1. Cấu hình và load model gốc
13
- base_model_name = r"lora_model" # model gốc mà adapter được áp dụng
14
-
15
- # Load tokenizer và model gốc (chạy trên GPU nếu có sẵn)
16
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
17
- tokenizer = AutoTokenizer.from_pretrained(base_model_name)
18
- base_model = AutoModelForCausalLM.from_pretrained(base_model_name, device_map="auto")
19
 
20
- # 2. Tải adapter LoRA từ thư mục "lora_model"
21
- # Thư mục này chứa các file được lưu bởi model.save_pretrained("lora_model")
22
- model = PeftModel.from_pretrained(base_model, base_model_name)
23
- model.to(device)
 
24
 
25
- # 3. Định nghĩa prompt template cho chatbot (có thể tùy chỉnh)
26
- prompt_template = """Bạn một trợ ảo thông minh, đóng vai một giáo viên giàu kinh nghiệm, tận tâm và nhiệt huyết.
27
- Nhiệm vụ của bạn là giải đáp mọi thắc mắc của người dùng một cách rõ ràng, chi tiết và dễ hiểu.
28
- Nếu người dùng chưa gửi bất kỳ tin nhắn nào, hãy hỏi: “Bạn cần giúp gì?” hoặc “Tôi có thể hỗ trợ bạn điều gì?”
 
 
 
29
 
30
- ### Đầu vào:
31
- {}
32
- ### Trả lời:
33
- """
34
 
35
- def generate_response(user_input):
36
- # Tạo prompt dựa trên input của người dùng
37
- prompt = prompt_template.format(user_input)
38
- inputs = tokenizer(prompt, return_tensors="pt").to(device)
39
-
40
- # Sinh kết quả với sampling (có thể điều chỉnh temperature, max_new_tokens,...)
41
- outputs = model.generate(
42
- **inputs,
43
-
44
- do_sample=True,
45
- temperature=0.7,
46
- pad_token_id=tokenizer.eos_token_id
47
- )
48
- # Decode kết quả và loại bỏ token đặc biệt
49
- response = tokenizer.decode(outputs[0], skip_special_tokens=True)
50
- # Nếu cần, bạn có thể xử lý để cắt bỏ phần prompt ban đầu
51
- # Ví dụ: trả về phần text sau prompt_template
52
- return response.replace(prompt, "").strip()
53
 
54
- # Streamlit UI
55
- st.title("Chatbot Trợ Ảo")
56
- st.write("Chào mừng đến với Chatbot! Nhập 'exit' để thoát.")
 
57
 
58
- user_input = st.text_input("Bạn: ", "")
 
59
  if user_input:
60
- if user_input.lower() == "exit":
61
- st.write("Chatbot: Tạm biệt!")
62
- else:
63
- reply = generate_response(user_input)
64
- st.write(f"Chatbot: {reply}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
+ from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
3
+ from peft import PeftModel
4
+ import torch
5
 
6
+ # Định nghĩa tên mô hình gốc adapter
7
+ BASE_MODEL_NAME = "unsloth/deepseek-r1-distill-llama-8b-unsloth-bnb-4bit"
8
+ ADAPTER_MODEL_PATH = "lora_model"
 
 
 
 
9
 
10
+ # Load hình gốc
11
+ base_model = AutoModelForCausalLM.from_pretrained(BASE_MODEL_NAME, torch_dtype=torch.float16, device_map="auto")
12
+ # Áp dụng adapter LoRA
13
+ model = PeftModel.from_pretrained(base_model, ADAPTER_MODEL_PATH)
14
+ tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL_NAME)
15
 
16
+ def generate_response(prompt):
17
+ """Generate a response from the model."""
18
+ inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
19
+ streamer = TextStreamer(tokenizer)
20
+ with torch.no_grad():
21
+ model.generate(**inputs, streamer=streamer, max_length=512)
22
+ return ""
23
 
24
+ # Streamlit UI
25
+ st.set_page_config(page_title="Chatbot", page_icon="🤖")
26
+ st.title("🤖 AI Chatbot")
 
27
 
28
+ # Initialize chat history if not exists
29
+ if "messages" not in st.session_state:
30
+ st.session_state.messages = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
+ # Display chat messages
33
+ for message in st.session_state.messages:
34
+ with st.chat_message(message["role"]):
35
+ st.markdown(message["content"])
36
 
37
+ # User input
38
+ user_input = st.chat_input("Nhập tin nhắn...")
39
  if user_input:
40
+ # Append user message
41
+ st.session_state.messages.append({"role": "user", "content": user_input})
42
+ with st.chat_message("user"):
43
+ st.markdown(user_input)
44
+
45
+ # Generate response
46
+ with st.chat_message("assistant"):
47
+ response = generate_response(user_input)
48
+ st.markdown(response)
49
+
50
+ # Append assistant response
51
+ st.session_state.messages.append({"role": "assistant", "content": response})