Abobasnik commited on
Commit
a93224f
·
verified ·
1 Parent(s): ab4ae33

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +56 -34
src/streamlit_app.py CHANGED
@@ -3,53 +3,69 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStream
3
  from threading import Thread
4
  import torch
5
 
6
- # Настройка интерфейса
7
- st.set_page_config(page_title="HiperAI Ultra", page_icon="🚀")
8
- st.title("🚀 HiperAI Ultra")
9
- st.caption("Режим: Максимальная скорость + Стриминг")
10
 
11
- # 1. Загрузка модели с оптимизацией под CPU
 
 
 
 
 
 
 
 
 
 
12
  @st.cache_resource
13
- def load_model():
14
  model_id = "Qwen/Qwen2.5-1.5B-Instruct"
 
 
15
  tokenizer = AutoTokenizer.from_pretrained(model_id)
 
 
16
  model = AutoModelForCausalLM.from_pretrained(
17
  model_id,
18
- torch_dtype=torch.float32,
19
  low_cpu_mem_usage=True,
20
  device_map="cpu"
21
  )
 
 
 
 
 
 
 
 
 
22
  return tokenizer, model
23
 
24
- tokenizer, model = load_model()
 
25
 
26
- # 2. Инициализация памяти
27
  if "messages" not in st.session_state:
28
  st.session_state.messages = []
29
 
30
- # Боковая панель
31
- with st.sidebar:
32
- st.title("⚙️ Настройки")
33
- if st.button("🗑️ Очистить чат"):
34
- st.session_state.messages = []
35
- st.rerun()
36
- st.info("ИИ оптимизирован для работы на CPU")
37
-
38
- # Отображение истории (последние 10 сообщений)
39
  for message in st.session_state.messages[-10:]:
40
  with st.chat_message(message["role"]):
41
  st.markdown(message["content"])
42
 
43
- # 3. Основная логика работы
44
- if prompt := st.chat_input("Напиши HiperAI..."):
 
45
  st.session_state.messages.append({"role": "user", "content": prompt})
46
  with st.chat_message("user"):
47
  st.markdown(prompt)
48
 
 
49
  with st.chat_message("assistant"):
50
- # Формируем компактный контекст для ускорения
51
- context = [{"role": "system", "content": "Ты HiperAI, быстрый и умный помощник. Отвечай на русском."}]
52
- context += st.session_state.messages[-5:] # Помним только последние 5 реплик
53
 
54
  inputs = tokenizer.apply_chat_template(
55
  context,
@@ -57,32 +73,38 @@ if prompt := st.chat_input("Напиши HiperAI..."):
57
  return_tensors="pt"
58
  ).to(model.device)
59
 
60
- # Настройка стримера для эффекта печати
61
  streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
62
 
63
- # Параметры для самой быстрой генерации
64
  generation_kwargs = dict(
65
  input_ids=inputs,
66
  streamer=streamer,
67
  max_new_tokens=512,
68
- do_sample=True, # Оставляем немного креативности
69
  temperature=0.7,
70
- top_k=50,
71
- top_p=0.95,
72
- use_cache=True # Ускоряет повторную генерацию
73
  )
74
 
75
- # Запуск в отдельном потоке (Thread)
76
  thread = Thread(target=model.generate, kwargs=generation_kwargs)
77
  thread.start()
78
 
79
- # Вывод текста по мере появления
80
  def stream_output():
81
- full_response = ""
82
  for new_text in streamer:
83
- full_response += new_text
84
  yield new_text
85
- st.session_state.messages.append({"role": "assistant", "content": full_response})
86
 
 
87
  st.write_stream(stream_output)
 
 
 
 
 
 
 
88
 
 
3
  from threading import Thread
4
  import torch
5
 
6
+ # 1. Настройка страницы
7
+ st.set_page_config(page_title="HiperAI Turbo Pro", page_icon="🏎️", layout="centered")
 
 
8
 
9
+ # Кастомный стиль для чата
10
+ st.markdown("""
11
+ <style>
12
+ .stChatMessage { background-color: #1e2129; border-radius: 10px; }
13
+ </style>
14
+ """, unsafe_allow_input_with_html=True)
15
+
16
+ st.title("🏎️ HiperAI Ultra Speed")
17
+ st.caption("Оптимизировано через Optimum + BetterTransformer")
18
+
19
+ # 2. Загрузка модели и токенайзера
20
  @st.cache_resource
21
+ def load_optimized_model():
22
  model_id = "Qwen/Qwen2.5-1.5B-Instruct"
23
+
24
+ # Загружаем токенайзер (нужен sentencepiece)
25
  tokenizer = AutoTokenizer.from_pretrained(model_id)
26
+
27
+ # Загружаем модель
28
  model = AutoModelForCausalLM.from_pretrained(
29
  model_id,
30
+ torch_dtype=torch.float32,
31
  low_cpu_mem_usage=True,
32
  device_map="cpu"
33
  )
34
+
35
+ # Включаем Optimum BetterTransformer для ускорения CPU
36
+ try:
37
+ from optimum.bettertransformer import BetterTransformer
38
+ model = BetterTransformer.transform(model)
39
+ st.sidebar.success("🚀 Optimum BetterTransformer активен!")
40
+ except Exception as e:
41
+ st.sidebar.warning(f"Optimum не запустился, работаем в обычном режиме.")
42
+
43
  return tokenizer, model
44
 
45
+ with st.spinner("Запуск двигателя ИИ..."):
46
+ tokenizer, model = load_optimized_model()
47
 
48
+ # 3. Работа с историей сообщений
49
  if "messages" not in st.session_state:
50
  st.session_state.messages = []
51
 
52
+ # Отображаем чат (последние 10 реплик для экономии памяти)
 
 
 
 
 
 
 
 
53
  for message in st.session_state.messages[-10:]:
54
  with st.chat_message(message["role"]):
55
  st.markdown(message["content"])
56
 
57
+ # 4. Поле ввода и логика ответа
58
+ if prompt := st.chat_input("Спроси HiperAI..."):
59
+ # Показываем сообщение пользователя
60
  st.session_state.messages.append({"role": "user", "content": prompt})
61
  with st.chat_message("user"):
62
  st.markdown(prompt)
63
 
64
+ # Ответ ассистента со стримингом
65
  with st.chat_message("assistant"):
66
+ # Ограниченный контекст для скорости
67
+ context = [{"role": "system", "content": "Ты HiperAI, быстрый и точный ИИ."}]
68
+ context += st.session_state.messages[-5:]
69
 
70
  inputs = tokenizer.apply_chat_template(
71
  context,
 
73
  return_tensors="pt"
74
  ).to(model.device)
75
 
76
+ # Стример для вывода текста по буквам
77
  streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
78
 
79
+ # Параметры генерации
80
  generation_kwargs = dict(
81
  input_ids=inputs,
82
  streamer=streamer,
83
  max_new_tokens=512,
84
+ do_sample=True,
85
  temperature=0.7,
86
+ use_cache=True
 
 
87
  )
88
 
89
+ # Запуск в отдельном потоке
90
  thread = Thread(target=model.generate, kwargs=generation_kwargs)
91
  thread.start()
92
 
93
+ # Функция для st.write_stream
94
  def stream_output():
95
+ full_text = ""
96
  for new_text in streamer:
97
+ full_text += new_text
98
  yield new_text
99
+ st.session_state.messages.append({"role": "assistant", "content": full_text})
100
 
101
+ # Запускаем эффект печати
102
  st.write_stream(stream_output)
103
+
104
+ # Боковое меню
105
+ with st.sidebar:
106
+ st.title("Управление")
107
+ if st.button("🗑️ Очистить память"):
108
+ st.session_state.messages = []
109
+ st.rerun()
110