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