import aiohttp import logging from config import OPENROUTER_API_KEY, OPENROUTER_MODEL logger = logging.getLogger(__name__) FORBIDDEN_WORDS = [ "мат", "блять", "сука", "хуй", "пизда", "ебать", "fuck", "shit", "bitch", "asshole", ] def is_safe_text(text: str) -> bool: text_lower = text.lower() for word in FORBIDDEN_WORDS: if word in text_lower: logger.warning(f"Обнаружено запрещённое слово: {word}") return False return True async def ask_llm(messages: list) -> str: url = "https://openrouter.ai/api/v1/chat/completions" headers = { "Authorization": f"Bearer {OPENROUTER_API_KEY}", "Content-Type": "application/json", "HTTP-Referer": "https://github.com/bytik-bot", "X-Title": "Bytik Bot", } payload = { "model": OPENROUTER_MODEL, "messages": messages, "max_tokens": 500, "temperature": 0.7, } try: async with aiohttp.ClientSession() as session: async with session.post(url, json=payload, headers=headers) as resp: if resp.status != 200: error_text = await resp.text() logger.error(f"OpenRouter error: {resp.status} - {error_text}") return "Ой, я что-то запутался. Попробуй спросить ещё раз! 🤔" data = await resp.json() answer = data["choices"][0]["message"]["content"].strip() if not is_safe_text(answer): logger.warning("Ответ от LLM содержит запрещённые слова. Блокируем.") return "Извини, я не могу это обсудить. Давай поговорим о чём-то другом! 😊" return answer except Exception as e: logger.error(f"Ошибка при запросе к LLM: {e}") return "Извини, я пока не могу ответить. Попробуй позже! 🤖"