pizza_chatbot5 / chat_handler.py
DocUA's picture
feat(pizzeria-chatbot): Initialize project with core chatbot functionality
87848d5
"""
Модуль для обробки логіки чату.
"""
from typing import List, Tuple, Optional
import menu_loader
import llm_client
# Глобальна змінна для кешування меню
_menu_cache: Optional[str] = None
def load_menu_once() -> str:
"""
Завантажує меню один раз та кешує його.
Returns:
Текст меню
Raises:
Exception: При помилках завантаження меню
"""
global _menu_cache
if _menu_cache is None:
_menu_cache = menu_loader.load_menu()
return _menu_cache
def process_message(message: str, history: List[Tuple[str, str]]) -> str:
"""
Обробляє повідомлення користувача та повертає відповідь бота.
Args:
message: Повідомлення від користувача
history: Історія чату у форматі Gradio [(user_msg, bot_msg), ...]
Returns:
Відповідь бота
"""
# Перевірка на порожнє повідомлення
if not message or not message.strip():
return "❌ Будь ласка, введіть ваше запитання."
# Перевірка на занадто довге повідомлення
if len(message) > 500:
return "❌ Повідомлення занадто довге. Будь ласка, сформулюйте коротше (до 500 символів)."
try:
# Завантажуємо меню (lazy loading з кешуванням)
menu_context = load_menu_once()
# Отримуємо відповідь від LLM
bot_response = llm_client.create_chat_completion(
user_message=message,
menu_context=menu_context,
conversation_history=history
)
return bot_response
except FileNotFoundError as e:
# Помилка відсутності файлу меню
return str(e)
except ValueError as e:
# Помилка з API ключем
return str(e)
except Exception as e:
# Інші помилки
return f"❌ Виникла помилка: {str(e)}"