OniXinO commited on
Commit
14e602c
·
1 Parent(s): 9417eab

Використання on_submit, Колбек для кнопки, Очищення в send_message

Browse files

Зміни:

Використання on_submit: Тепер функція on_send_button_click (яка викликає send_message) передається безпосередньо в параметр on_submit віджета st.text_input. Це є правильним способом обробки натискання Enter.
Колбек для кнопки: Кнопка "Надіслати" також використовує колбек on_click=on_send_button_click.
Очищення в send_message: Очищення st.session_state.user_input та st.session_state.temp_user_input відбувається всередині функції send_message, яка викликається колбеками.
Тепер не повинно бути помилок StreamlitAPIException, і відправка повідомлень повинна працювати як при натисканні кнопки, так і при натисканні Enter (звичайного, без Shift або Ctrl). Streamlit за замовчуванням обробляє звичайний Enter як подію on_submit для текстових полів. Shift+Enter та Ctrl+Enter зазвичай додають новий рядок у текстове поле.

Files changed (1) hide show
  1. app.py +7 -13
app.py CHANGED
@@ -25,25 +25,19 @@ def send_message():
25
  outputs = model.generate(**inputs, max_length=100)
26
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
27
  st.session_state.history.extend([st.session_state.user_input, response])
28
- st.session_state.user_input = "" # clear the stored user input
29
- st.session_state.temp_user_input = "" # clear the text input field
30
 
31
  def update_user_input():
32
  st.session_state.user_input = st.session_state.temp_user_input
33
 
34
- # Очищаємо temp_user_input після натискання кнопки
35
- def clear_input():
36
- st.session_state.temp_user_input = ""
37
-
38
- st.text_input("Ви:", key="temp_user_input", on_change=update_user_input)
39
-
40
- if st.button("Надіслати", on_click=clear_input):
41
  send_message()
42
 
43
- # Обробка натискання Enter
44
- if st.session_state.get("temp_user_input", "") and st.session_state.get("last_input", "") != st.session_state.get("temp_user_input", ""):
45
- st.session_state["last_input"] = st.session_state["temp_user_input"]
46
- send_message()
47
 
48
  if st.session_state.history:
49
  for i in range(0, len(st.session_state.history), 2):
 
25
  outputs = model.generate(**inputs, max_length=100)
26
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
27
  st.session_state.history.extend([st.session_state.user_input, response])
28
+ st.session_state.user_input = "" # Очищаємо збережений ввід
29
+ st.session_state.temp_user_input = "" # Очищаємо текстове поле
30
 
31
  def update_user_input():
32
  st.session_state.user_input = st.session_state.temp_user_input
33
 
34
+ # Колбек для обробки натискання кнопки "Надіслати"
35
+ def on_send_button_click():
 
 
 
 
 
36
  send_message()
37
 
38
+ st.text_input("Ви:", key="temp_user_input", on_change=update_user_input, on_submit=on_send_button_click)
39
+
40
+ st.button("Надіслати", on_click=on_send_button_click)
 
41
 
42
  if st.session_state.history:
43
  for i in range(0, len(st.session_state.history), 2):