import logging import aiohttp import os logger = logging.getLogger(__name__) LLAMA_API_URL = os.getenv("LLAMA_API_URL", "https://mirror.porno4free.ru/zovos-ai/") FORTUNE_PROMPT = ( "Ты — уличный гадатель с района, базаришь на фене. " "Пользователь хочет погадать на тему. Выдай шуточное гадание, " "коротко и дерзко, 2-3 предложения максимум. " "В конце ОБЯЗАТЕЛЬНО напиши на отдельной строке в формате:\n" "MEM_UP: <текст сверху для мема, максимум 4 слова>\n" "MEM_DOWN: <текст снизу для мема, максимум 4 слова>\n" "Тексты для мема должны быть смешными и короткими." ) async def generate_fortune(topic: str) -> tuple[str, str, str]: url = f"{LLAMA_API_URL.rstrip('/')}/v1/chat/completions" payload = { "messages": [ {"role": "system", "content": FORTUNE_PROMPT}, {"role": "user", "content": f"Погадай мне на: {topic}"}, ], "max_tokens": 200, "temperature": 0.9, "top_p": 0.9, } async with aiohttp.ClientSession() as session: async with session.post(url, json=payload, timeout=aiohttp.ClientTimeout(total=120)) as resp: data = await resp.json() text = data["choices"][0]["message"]["content"].strip() up_text = "" down_text = "" fortune_lines = [] for line in text.split("\n"): stripped = line.strip() if stripped.upper().startswith("MEM_UP:"): up_text = stripped.split(":", 1)[1].strip() elif stripped.upper().startswith("MEM_DOWN:"): down_text = stripped.split(":", 1)[1].strip() else: fortune_lines.append(line) fortune_text = "\n".join(fortune_lines).strip() if not up_text: up_text = "Гадание" if not down_text: down_text = "по фене" return fortune_text, up_text, down_text