Використання 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 зазвичай додають новий рядок у текстове поле.
@@ -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 = "" #
|
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
|
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 |
-
|
44 |
-
|
45 |
-
|
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):
|