import aiohttp import logging from app.settings_cache import SettingsCache logger = logging.getLogger(__name__) async def categorize_with_gpt(text: str) -> str: gpt_key = SettingsCache.get("yandex_gpt_key") folder_id = SettingsCache.get("yandex_folder_id") if not gpt_key or not folder_id: return "" prompt = ( "Определи категорию обращения клиента из списка: " "Видеонаблюдение, СКУД, Пожарная сигнализация, IT-инфраструктура, " "Обслуживание, Консультация, Другое. " "Ответь только названием категории, без пояснений. " f"Текст обращения: {text}" ) url = "https://llm.api.cloud.yandex.net/foundationModels/v1/completion" headers = { "Authorization": f"Api-Key {gpt_key}", "Content-Type": "application/json", "x-folder-id": folder_id, } body = { "modelUri": f"gpt://{folder_id}/yandexgpt-lite/latest", "completionOptions": {"stream": False, "temperature": 0.1, "maxTokens": 50}, "messages": [{"role": "user", "text": prompt}], } try: async with aiohttp.ClientSession() as session: async with session.post(url, headers=headers, json=body) as resp: if resp.status == 200: data = await resp.json() return data.get("result", {}).get("alternatives", [{}])[0].get("message", {}).get("text", "").strip() logger.warning(f"GPT categorize returned {resp.status}") except Exception as e: logger.error(f"GPT categorize error: {e}") return "" async def analyze_emotion_with_gpt(text: str) -> str: gpt_key = SettingsCache.get("yandex_gpt_key") folder_id = SettingsCache.get("yandex_folder_id") if not gpt_key or not folder_id: return "neutral" prompt = ( "Определи эмоциональную окраску текста клиента. " "Варианты: positive, neutral, negative. " "Ответь только одним словом. " f"Текст: {text}" ) url = "https://llm.api.cloud.yandex.net/foundationModels/v1/completion" headers = { "Authorization": f"Api-Key {gpt_key}", "Content-Type": "application/json", "x-folder-id": folder_id, } body = { "modelUri": f"gpt://{folder_id}/yandexgpt-lite/latest", "completionOptions": {"stream": False, "temperature": 0.1, "maxTokens": 10}, "messages": [{"role": "user", "text": prompt}], } try: async with aiohttp.ClientSession() as session: async with session.post(url, headers=headers, json=body) as resp: if resp.status == 200: data = await resp.json() return data.get("result", {}).get("alternatives", [{}])[0].get("message", {}).get("text", "").strip().lower() logger.warning(f"GPT emotion analysis returned {resp.status}") except Exception as e: logger.error(f"GPT emotion analysis error: {e}") return "neutral"