Spaces:
Sleeping
Sleeping
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() | |