Boris commited on
Commit
b49f954
·
1 Parent(s): 1eb838c
Files changed (1) hide show
  1. src/streamlit_app.py +92 -97
src/streamlit_app.py CHANGED
@@ -1,109 +1,104 @@
1
- # import streamlit as st
2
- # from langchain_core.messages import HumanMessage, AIMessage
3
- # from get_classification import get_graph_class
4
- # from datetime import datetime
5
-
6
-
7
- # def message_to_dict(messages):
8
- # result = []
9
- # for message in messages:
10
- # if isinstance(message, HumanMessage) or isinstance(message, AIMessage):
11
- # print("message:", message.content)
12
- # if message.content == "" or message.content is None:
13
- # continue
14
- # if isinstance(message, HumanMessage):
15
- # result.append({"role": "user", "content": message.content})
16
- # elif isinstance(message, AIMessage):
17
- # result.append({"role": "assistant", "content": message.content})
18
- # print("-" * 100)
19
- # return result
20
-
21
-
22
- # def find_last_bot_message(messages):
23
- # """Находит последнее сообщение бота"""
24
- # for message in messages[::-1]:
25
- # if isinstance(message, AIMessage) and len(message.content) > 0:
26
- # return message.content
27
- # return None
28
-
29
-
30
- # def display_chat_messages():
31
- # """Отображает историю сообщений в чате"""
32
- # for message in st.session_state.messages:
33
- # with st.chat_message(message["role"]):
34
- # st.markdown(message["content"])
35
-
36
-
37
- # def save_broken_case():
38
- # messages_dict = st.session_state.messages
39
- # result_str = ""
40
- # for elem in messages_dict:
41
- # role = elem["role"]
42
- # content = elem["content"]
43
- # result_str += f"{role}: {content}\n"
44
 
45
- # current_datetime = datetime.now()
46
- # formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
47
-
48
- # # with open("/Users/admin/my_documents/retrieval_part/services/broken_cases.txt", "a") as file:
49
- # # file.write(f"{formatted_datetime}\n" + result_str + "\n" + "-" * 50 + "\n\n")
50
-
51
-
52
- # def handle_user_input():
53
- # """Обрабатывает ввод пользователя и генерирует ответ бота"""
54
- # if prompt := st.chat_input("Введите ваш вопрос"):
55
- # st.session_state.messages.append({"role": "user", "content": prompt})
56
- # if prompt.lower().startswith("log"):
57
- # save_broken_case()
58
- # st.session_state.messages = []
59
- # display_chat_messages()
60
- # else:
61
- # with st.chat_message("user"):
62
- # st.markdown(prompt)
63
 
64
- # try:
65
- # if "bot" not in st.session_state:
66
- # st.session_state.bot = get_graph_class(prompt)
67
- # st.session_state.bot.invoke(prompt)
68
- # except Exception as e:
69
- # st.error(f"Ошибка: {str(e)}")
70
 
71
- # # Извлекаем последнее сообщение бота
72
- # last_bot_message = find_last_bot_message(st.session_state.bot.messages)
73
- # st.session_state.messages.append(
74
- # {"role": "assistant", "content": last_bot_message}
75
- # )
76
- # with st.chat_message("assistant"):
77
- # st.markdown(last_bot_message)
78
- # raise ValueError
79
-
80
 
81
- # def clear_chat():
82
- # """Очищает чат и пересоздает бота"""
83
- # st.session_state.messages = []
84
- # del st.session_state.bot
85
 
 
 
 
 
86
 
87
- # def main():
88
- # """Основная функция приложения"""
89
- # # Заголовок приложения
90
- # st.title("Чат-бот технической поддержки OpenVPN")
91
 
92
- # # Кнопка очистки чата
93
- # if st.button("Clear"):
94
- # clear_chat()
 
95
 
96
- # if "messages" not in st.session_state:
97
- # st.session_state.messages = []
 
98
 
99
- # # Отображение чата и обработка ввода
100
- # display_chat_messages()
101
- # handle_user_input()
102
 
 
 
 
103
 
104
- # if __name__ == "__main__":
105
- # main()
106
 
107
-
108
- import streamlit as st
109
- st.write("Hello, World!")
 
1
+ import streamlit as st
2
+ from langchain_core.messages import HumanMessage, AIMessage
3
+ from get_classification import get_graph_class
4
+ from datetime import datetime
5
+
6
+
7
+ def message_to_dict(messages):
8
+ result = []
9
+ for message in messages:
10
+ if isinstance(message, HumanMessage) or isinstance(message, AIMessage):
11
+ print("message:", message.content)
12
+ if message.content == "" or message.content is None:
13
+ continue
14
+ if isinstance(message, HumanMessage):
15
+ result.append({"role": "user", "content": message.content})
16
+ elif isinstance(message, AIMessage):
17
+ result.append({"role": "assistant", "content": message.content})
18
+ print("-" * 100)
19
+ return result
20
+
21
+
22
+ def find_last_bot_message(messages):
23
+ """Находит последнее сообщение бота"""
24
+ for message in messages[::-1]:
25
+ if isinstance(message, AIMessage) and len(message.content) > 0:
26
+ return message.content
27
+ return None
28
+
29
+
30
+ def display_chat_messages():
31
+ """Отображает историю сообщений в чате"""
32
+ for message in st.session_state.messages:
33
+ with st.chat_message(message["role"]):
34
+ st.markdown(message["content"])
35
+
36
+
37
+ def save_broken_case():
38
+ messages_dict = st.session_state.messages
39
+ result_str = ""
40
+ for elem in messages_dict:
41
+ role = elem["role"]
42
+ content = elem["content"]
43
+ result_str += f"{role}: {content}\n"
44
 
45
+ current_datetime = datetime.now()
46
+ formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
47
+
48
+ # with open("/Users/admin/my_documents/retrieval_part/services/broken_cases.txt", "a") as file:
49
+ # file.write(f"{formatted_datetime}\n" + result_str + "\n" + "-" * 50 + "\n\n")
50
+
51
+
52
+ def handle_user_input():
53
+ """Обрабатывает ввод пользователя и генерирует ответ бота"""
54
+ if prompt := st.chat_input("Введите ваш вопрос"):
55
+ st.session_state.messages.append({"role": "user", "content": prompt})
56
+ if prompt.lower().startswith("log"):
57
+ save_broken_case()
58
+ st.session_state.messages = []
59
+ display_chat_messages()
60
+ else:
61
+ with st.chat_message("user"):
62
+ st.markdown(prompt)
63
 
64
+ try:
65
+ if "bot" not in st.session_state:
66
+ st.session_state.bot = get_graph_class(prompt)
67
+ st.session_state.bot.invoke(prompt)
68
+ except Exception as e:
69
+ st.error(f"Ошибка: {str(e)}")
70
 
71
+ # Извлекаем последнее сообщение бота
72
+ last_bot_message = find_last_bot_message(st.session_state.bot.messages)
73
+ st.session_state.messages.append(
74
+ {"role": "assistant", "content": last_bot_message}
75
+ )
76
+ with st.chat_message("assistant"):
77
+ st.markdown(last_bot_message)
 
 
78
 
 
 
 
 
79
 
80
+ def clear_chat():
81
+ """Очищает чат и пересоздает бота"""
82
+ st.session_state.messages = []
83
+ del st.session_state.bot
84
 
 
 
 
 
85
 
86
+ def main():
87
+ """Основная функция приложения"""
88
+ # Заголовок приложения
89
+ st.title("Чат-бот технической поддержки OpenVPN")
90
 
91
+ # Кнопка очистки чата
92
+ if st.button("Clear"):
93
+ clear_chat()
94
 
95
+ if "messages" not in st.session_state:
96
+ st.session_state.messages = []
 
97
 
98
+ # Отображение чата и обработка ввода
99
+ display_chat_messages()
100
+ handle_user_input()
101
 
 
 
102
 
103
+ if __name__ == "__main__":
104
+ main()