AugustLight commited on
Commit
43d5ac4
·
verified ·
1 Parent(s): 32b5fa7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -43
app.py CHANGED
@@ -2,7 +2,7 @@ import gradio as gr
2
  from huggingface_hub import hf_hub_download
3
  from llama_cpp import Llama
4
 
5
- # Так надо
6
  model = None
7
 
8
  def load_model():
@@ -20,9 +20,9 @@ def load_model():
20
 
21
  model = Llama(
22
  model_path=model_path,
23
- n_ctx=2048, # Размер контекста
24
- n_threads=4, # Количество потоков
25
- n_batch=512 # Размер батча
26
  )
27
 
28
  print("Модель успешно инициализирована!")
@@ -42,9 +42,10 @@ def respond(message, history, system_message, max_new_tokens, temperature, top_p
42
  for user_msg, assistant_msg in history:
43
  context += f"User: {user_msg}\nAssistant: {assistant_msg}\n"
44
  context += f"User: {message}\nAssistant: "
45
-
46
  print(f"Генерируем ответ для контекста длиной {len(context)} символов")
47
 
 
 
48
  # Используем генерацию с потоком
49
  for response in model(
50
  prompt=context,
@@ -52,12 +53,13 @@ def respond(message, history, system_message, max_new_tokens, temperature, top_p
52
  temperature=temperature,
53
  top_p=top_p,
54
  stop=["User:", "\n\n", "<|endoftext|>"],
55
- echo=False, # Не возвращать промпт в ответе
56
- stream=True # Включаем потоковую передачу
57
  ):
58
- generated_text = response['choices'][0]['text']
59
- print(f"Промежуточный ответ: {generated_text}")
60
- yield generated_text # Отправляем промежуточный результат
 
61
 
62
  print("Ответ сгенерирован полностью.")
63
 
@@ -66,47 +68,53 @@ def respond(message, history, system_message, max_new_tokens, temperature, top_p
66
  print(error_msg)
67
  yield error_msg
68
 
69
-
70
- demo = gr.ChatInterface(
71
- respond,
72
- additional_inputs=[
73
- gr.Textbox(
74
- value="Ты дружелюбный и полезный ассистент. Отвечай обдуманно и по делу.",
 
75
  label="System message"
76
- ),
77
- gr.Slider(
78
- minimum=1,
79
- maximum=2048,
80
- value=512,
81
- step=1,
82
  label="Max new tokens"
83
- ),
84
- gr.Slider(
85
- minimum=0.1,
86
- maximum=2.0,
87
- value=0.3,
88
- step=0.1,
89
  label="Temperature"
90
- ),
91
- gr.Slider(
92
  minimum=0.1,
93
  maximum=1.0,
94
  value=0.95,
95
- step=0.05,
96
  label="Top-p (nucleus sampling)"
97
- ),
98
- ],
99
- title="Llight Chat",
100
- description="Чат с LLight-3.2-3B-Instruct",
101
- examples=[
102
- ["Привет! Как дела?"],
103
- ["Расскажи мне о себе"],
104
- ["Что ты умеешь делать?"]
105
- ],
106
- cache_examples=False
107
- )
 
 
 
 
 
 
108
 
109
- # Запускаем приложение
110
  if __name__ == "__main__":
111
  try:
112
  print("Инициализация приложения...")
 
2
  from huggingface_hub import hf_hub_download
3
  from llama_cpp import Llama
4
 
5
+ # Глобальная модель
6
  model = None
7
 
8
  def load_model():
 
20
 
21
  model = Llama(
22
  model_path=model_path,
23
+ n_ctx=2048,
24
+ n_threads=4,
25
+ n_batch=512
26
  )
27
 
28
  print("Модель успешно инициализирована!")
 
42
  for user_msg, assistant_msg in history:
43
  context += f"User: {user_msg}\nAssistant: {assistant_msg}\n"
44
  context += f"User: {message}\nAssistant: "
 
45
  print(f"Генерируем ответ для контекста длиной {len(context)} символов")
46
 
47
+ response_text = ""
48
+
49
  # Используем генерацию с потоком
50
  for response in model(
51
  prompt=context,
 
53
  temperature=temperature,
54
  top_p=top_p,
55
  stop=["User:", "\n\n", "<|endoftext|>"],
56
+ echo=False,
57
+ stream=True
58
  ):
59
+ chunk = response['choices'][0]['text']
60
+ response_text += chunk
61
+ print(f"Промежуточный ответ: {chunk}")
62
+ yield response_text # Отправляем накопленный текст
63
 
64
  print("Ответ сгенерирован полностью.")
65
 
 
68
  print(error_msg)
69
  yield error_msg
70
 
71
+ with gr.Blocks() as demo:
72
+ chatbot = gr.Chatbot()
73
+ msg = gr.Textbox(label="Сообщение")
74
+
75
+ with gr.Accordion("Параметры", open=False):
76
+ system = gr.Textbox(
77
+ value="Ты дружелюбный и полезный ассистент. Отвечай обдуманно и по делу.",
78
  label="System message"
79
+ )
80
+ max_new_tokens = gr.Slider(
81
+ minimum=1,
82
+ maximum=2048,
83
+ value=512,
84
+ step=1,
85
  label="Max new tokens"
86
+ )
87
+ temperature = gr.Slider(
88
+ minimum=0.1,
89
+ maximum=2.0,
90
+ value=0.3,
91
+ step=0.1,
92
  label="Temperature"
93
+ )
94
+ top_p = gr.Slider(
95
  minimum=0.1,
96
  maximum=1.0,
97
  value=0.95,
98
+ step=0.05,
99
  label="Top-p (nucleus sampling)"
100
+ )
101
+
102
+ clear = gr.Button("Очистить")
103
+
104
+ def user(user_message, history):
105
+ return "", history + [[user_message, None]]
106
+
107
+ def bot(history, system_message, max_new_tokens, temperature, top_p):
108
+ message = history[-1][0]
109
+ for response_text in respond(message, history[:-1], system_message, max_new_tokens, temperature, top_p):
110
+ history[-1][1] = response_text
111
+ yield history
112
+
113
+ msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
114
+ bot, [chatbot, system, max_new_tokens, temperature, top_p], chatbot
115
+ )
116
+ clear.click(lambda: None, None, chatbot, queue=False)
117
 
 
118
  if __name__ == "__main__":
119
  try:
120
  print("Инициализация приложения...")