""" Модуль для обробки логіки чату. """ 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)}"