shao3d commited on
Commit
0ba7013
·
verified ·
1 Parent(s): 16211d5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -23
app.py CHANGED
@@ -3,40 +3,38 @@ import torch
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  from peft import PeftModel
5
 
6
- # Загружаем базовую модель и токенизатор
7
- base_model_name = "t-tech/T-lite-it-1.0"
8
- lora_repo = "shao3d/my-t-lite-qlora" # Замени на твой логин
9
 
10
  tokenizer = AutoTokenizer.from_pretrained(base_model_name)
11
  base_model = AutoModelForCausalLM.from_pretrained(
12
  base_model_name,
13
- device_map="cpu", # Используем CPU для бесплатного Space
14
- torch_dtype=torch.float16 # FP16 для экономии памяти
15
  )
16
  model = PeftModel.from_pretrained(base_model, lora_repo)
17
- model.eval() # Переключаем в режим предсказания
18
 
19
- def generate_response(history):
20
- # Если history пустой, берем последнее сообщение из текстового поля (msg)
21
- # Но в данном случае Gradio передаёт history, поэтому используем его
22
- if not history:
23
- raise gr.Error("Пожалуйста, введите сообщение в текстовое поле перед отправкой.") # Проверка на случай, если сообщение не введено
24
- # Берем последний вопрос пользователя
25
- user_message = history[-1][0] if history else None # Если history пуст, возвращаем None (добавим позже логику с msg)
26
- if user_message is None:
27
  raise gr.Error("Пожалуйста, введите сообщение в текстовое поле перед отправкой.")
28
- # Генерируем ответ
29
- inputs = tokenizer(user_message, return_tensors="pt").to("cpu")
 
30
  outputs = model.generate(
31
  **inputs,
32
- max_new_tokens=50, # Уменьшили для скорости
33
- temperature=0.1, # Сделали ответы точнее и быстрее
34
- top_p=0.5, # Уменьшили для скорости
35
- do_sample=True # Оставляем для разнообразия
36
  )
37
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
38
- # Возвращаем обновлённую историю: добавляем пару [вопрос, ответ]
39
- return history + [[user_message, response[len(user_message):].strip()]]
 
 
 
40
 
41
  # Создаём интерфейс Gradio
42
  with gr.Blocks() as demo:
@@ -44,7 +42,9 @@ with gr.Blocks() as demo:
44
  chatbot = gr.Chatbot()
45
  msg = gr.Textbox(placeholder="Напиши сообщение для модели...")
46
  clear = gr.Button("Очистить чат")
47
- msg.submit(generate_response, inputs=[chatbot], outputs=chatbot) # Указываем, что входные данные — это chatbot
 
 
48
  clear.click(lambda: [], None, chatbot)
49
 
50
  demo.launch()
 
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  from peft import PeftModel
5
 
6
+ # Загружаем модель и токенизатор
7
+ base_model_name = "t-tech/T-lite-it-1.0" # Базовая модель T-Lite
8
+ lora_repo = "shao3d/my-t-lite-qlora" # Твой репозиторий с LoRA-адаптером
9
 
10
  tokenizer = AutoTokenizer.from_pretrained(base_model_name)
11
  base_model = AutoModelForCausalLM.from_pretrained(
12
  base_model_name,
13
+ device_map="cpu", # Бесплатный Space использует CPU
14
+ torch_dtype=torch.float16 # Экономим память
15
  )
16
  model = PeftModel.from_pretrained(base_model, lora_repo)
17
+ model.eval() # Режим предсказания
18
 
19
+ def generate_response(history, message):
20
+ # Проверяем, что пользователь ввёл сообщение
21
+ if not message or message.strip() == "":
 
 
 
 
 
22
  raise gr.Error("Пожалуйста, введите сообщение в текстовое поле перед отправкой.")
23
+
24
+ # Генерируем ответ от модели
25
+ inputs = tokenizer(message, return_tensors="pt").to("cpu")
26
  outputs = model.generate(
27
  **inputs,
28
+ max_new_tokens=50, # Ограничиваем длину для скорости
29
+ temperature=0.7, # Баланс между точностью и разнообразием
30
+ do_sample=True # Включаем разнообразие ответов
 
31
  )
32
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
33
+
34
+ # Обновляем историю: добавляем [вопрос, ответ]
35
+ if history is None:
36
+ history = []
37
+ return history + [[message, response]]
38
 
39
  # Создаём интерфейс Gradio
40
  with gr.Blocks() as demo:
 
42
  chatbot = gr.Chatbot()
43
  msg = gr.Textbox(placeholder="Напиши сообщение для модели...")
44
  clear = gr.Button("Очистить чат")
45
+
46
+ # Связываем ввод с функцией
47
+ msg.submit(generate_response, inputs=[chatbot, msg], outputs=chatbot)
48
  clear.click(lambda: [], None, chatbot)
49
 
50
  demo.launch()