Boris
init
d1254fd
raw
history blame
3.35 kB
import gradio as gr
from langchain_core.messages import HumanMessage, AIMessage
from get_classification import get_graph_class
from datetime import datetime
# Глобальные переменные состояния (аналог session_state в Streamlit)
messages = []
bot_instance = None
def find_last_bot_message(messages_list):
"""Находит последнее сообщение бота"""
for message in messages_list[::-1]:
if isinstance(message, AIMessage) and len(message.content) > 0:
return message.content
return None
def save_broken_case(messages_dict):
"""Сохраняет 'сломанные' кейсы (заглушка)"""
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")
print(f"Saved broken case at {formatted_datetime}:\n{result_str}")
def predict(message, history):
"""Обработка ввода пользователя и генерация ответа"""
global messages, bot_instance
# Обработка команды log
if message.lower().startswith("log"):
save_broken_case(messages)
messages = []
return ""
# Добавляем сообщение пользователя
messages.append({"role": "user", "content": message})
try:
# Инициализация бота при первом запросе
if bot_instance is None:
bot_instance = get_graph_class(message)
# Вызываем бота
bot_instance.invoke(message)
# Извлекаем последний ответ бота
last_bot_message = find_last_bot_message(bot_instance.messages)
last_bot_message = last_bot_message or "Извините, не удалось сгенерировать ответ"
# Добавляем ответ в историю
messages.append({"role": "assistant", "content": last_bot_message})
return last_bot_message
except Exception as e:
error_msg = f"Ошибка: {str(e)}"
messages.append({"role": "assistant", "content": error_msg})
return error_msg
def clear_chat():
"""Очистка чата и сброс состояния"""
global messages, bot_instance
messages = []
bot_instance = None
return []
# Создаем интерфейс чата
chat_interface = gr.ChatInterface(
fn=predict,
title="Чат-бот технической поддержки",
description="Задайте ваш вопрос технической поддержке",
additional_inputs=[
gr.Button("Clear", variant="stop")
],
examples=[
"Как настроить VPN?",
"Почему не работает принтер?",
"Как сбросить пароль?"
]
)
# Добавляем обработчик для кнопки Clear
chat_interface.additional_inputs[0].click(
fn=clear_chat,
inputs=[],
outputs=chat_interface.chatbot
)
# Запускаем приложение
if __name__ == "__main__":
chat_interface.launch()