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