import asyncio import datetime import json import logging import time from yandex_cloud_ml_sdk import YCloudML from deepseek import DeepSeekAPI # Инициализация клиентов sdk = YCloudML( folder_id="b1g9ebhd2j6dapolmspn", auth="t1.9euelZqOxsiNmczGlYmVjZqPnciemu3rnpWamMbLiY7Ix8zHyMvPlZGJmc3l9PcLQDFA-e93IjGb3fT3S24uQPnvdyIxm83n9euelZqSyo6cyJ2PnMjInceWmI6QnO_8xeuelZqSyo6cyJ2PnMjInceWmI6QnA.73RaOj7lFKgEkAFnhrpy1LkS3EvH-hYeBPZ1mX43hyPgSCZ4ShrVFjarra1xCHGpRA3F_Z576viaMyg6UXR-BQ" ) api_client = DeepSeekAPI("sk-2a2045f744474426b03fc18e30e9f561") async def nlp_yandex(question: str) -> str: """Асинхронный запрос к Yandex GPT""" start_time = datetime.datetime.now() try: model = sdk.models.completions("yandexgpt", model_version="rc") model.configure(response_format="json", temperature=1) operation = await model._run_deferred([ { "role": "system", "text": "Ты используешься как nlp процессор. Твоя задача по заданному комментарию траты понять в какую категорию эта трата относится. " "Ответ предположением 3х категории с рассчитанным весом в формате json [{'category': 'cat1', 'weight': 0.5}, ...]." "Используй категории из данных." }, { "role": "assistant", "text": "Aвто,Аптеки,Дни рождения и подарки,Другое,ЖКХ,Интернет и связь,Кофе,Красота,Кредиты и долги,Мебель,Медицина,Одежда,Продукты,Прочие услуги,Путешествия,Развлечения,Ребенок,Рестораны и кафе,Сбережения,Спорт,Транспорт,Электроника" }, {"role": "user", "text": question}, ]) while operation.get_status().is_running: print(operation.get_status()) await asyncio.sleep(0.1) result = operation.get_result() response_msg = "".join(alt.text for alt in result) print(f"Yandex NLP time: {datetime.datetime.now() - start_time}") return response_msg.replace('```', '') except Exception as e: logging.error(f"Yandex NLP error: {str(e)}") return "Ошибка обработки запроса" def fast_nlp_yandex(question: str) -> str: """Cинхронный запрос к Yandex GPT""" start_time = datetime.datetime.now() try: model = sdk.models.completions("yandexgpt", model_version="rc") model.configure(response_format="json", temperature=1) result = model.run([ { "role": "system", "text": "Ты используешься как nlp процессор. Твоя задача по заданному комментарию траты понять в какую категорию эта трата относится. " "Ответ предположением 3х категории с рассчитанным весом в формате json [{'category': 'cat1', 'weight': 0.5}, ...]." "Используй категории из данных." }, { "role": "assistant", "text": "Aвто,Аптеки,Дни рождения и подарки,Другое,ЖКХ,Интернет и связь,Кофе,Красота,Кредиты и долги,Мебель,Медицина,Одежда,Продукты,Прочие услуги,Путешествия,Развлечения,Ребенок,Рестораны и кафе,Сбережения,Спорт,Транспорт,Электроника" }, {"role": "user", "text": question}, ]) response_msg = "".join(alt.text for alt in result) print(f"Sync Yandex NLP time: {datetime.datetime.now() - start_time}") return response_msg.replace('```', '') except Exception as e: logging.error(f"Yandex NLP error: {str(e)}") return "Ошибка обработки запроса" def nlp_cloud(question: str) -> str: """Запрос к DeepSeek API""" start_time = datetime.datetime.now() try: prompt = [ { "role": "system", "content": "Ты используешься как nlp процессор. Твоя задача по заданному комментарию траты понять в какую категорию эта трата относится. " "Ответ предположением как минимум 3х категории с рассчитанным весом в формате json [{'id': 'id1', 'weight': 0.5}, ...]. " "Используй ТОЛЬКО категории из данных." }, {"role": "user", "content": question}, { "role": "assistant", "content": "Aвто(id=677bc767c7857460a491bd52),Аптеки(id=677bc767c7857460a491bd59),Дни рождения и подарки(id=677bc767c7857460a491bd54),Другое(id=67b83e141fc0575a3f0a383f),ЖКХ(id=677bc767c7857460a491bd4b),Интернет и связь(id=677bc767c7857460a491bd53),Кофе(id=677bc767c7857460a491bd4e),Красота(id=677bc767c7857460a491bd50),Кредиты и долги(id=677bc767c7857460a491bd49),Мебель(id=677bc767c7857460a491bd4c),Медицина(id=677bc767c7857460a491bd5a),Одежда(id=677bc767c7857460a491bd5b),Продукты(id=677bc767c7857460a491bd4a),Прочие услуги(id=677bc767c7857460a491bd4d),Путешествия(id=677bc767c7857460a491bd56),Развлечения(id=677bc767c7857460a491bd58),Ребенок(id=677bc767c7857460a491bd5d),Рестораны и кафе(id=677bc767c7857460a491bd55),Сбережения(id=677bc767c7857460a491bd4f),Спорт(id=677bc767c7857460a491bd57),Транспорт(id=677bc767c7857460a491bd51),Электроника(id=677bc767c7857460a491bd5c)" }, ] response = "" for chunk in api_client.chat_completion(prompt=prompt, stream=True): response += chunk # Очистка и парсинг JSON clean_response = response.replace('```json', '').replace('```', '').strip() try: parsed = json.loads(clean_response) print(f"DeepSeek NLP time: {datetime.datetime.now() - start_time}") return json.dumps(parsed, ensure_ascii=False, indent=2) except json.JSONDecodeError: return clean_response except Exception as e: logging.error(f"DeepSeek NLP error: {str(e)}") return json.dumps({"error": str(e)}) def generate_spends(): """Запрос к DeepSeek API""" start_time = datetime.datetime.now() try: prompt = [ { "role": "system", "content": "Ты используешься для генерации виртуальных трат, для последующего обучения NLP модели. " "Тебе даны категории с их идентификаторами. По запросу сгенерируй 50 человеческих транзакций." "Используй ТОЛЬКО категории из данных.Ответь в формате csv id, comment, category" }, {"role": "user", "content": "Давай"}, { "role": "assistant", "content": "Aвто(id=677bc767c7857460a491bd52),Аптеки(id=677bc767c7857460a491bd59),Дни рождения и подарки(id=677bc767c7857460a491bd54),Другое(id=67b83e141fc0575a3f0a383f),ЖКХ(id=677bc767c7857460a491bd4b),Интернет и связь(id=677bc767c7857460a491bd53),Кофе(id=677bc767c7857460a491bd4e),Красота(id=677bc767c7857460a491bd50),Кредиты и долги(id=677bc767c7857460a491bd49),Мебель(id=677bc767c7857460a491bd4c),Медицина(id=677bc767c7857460a491bd5a),Одежда(id=677bc767c7857460a491bd5b),Продукты(id=677bc767c7857460a491bd4a),Прочие услуги(id=677bc767c7857460a491bd4d),Путешествия(id=677bc767c7857460a491bd56),Развлечения(id=677bc767c7857460a491bd58),Ребенок(id=677bc767c7857460a491bd5d),Рестораны и кафе(id=677bc767c7857460a491bd55),Сбережения(id=677bc767c7857460a491bd4f),Спорт(id=677bc767c7857460a491bd57),Транспорт(id=677bc767c7857460a491bd51),Электроника(id=677bc767c7857460a491bd5c)" }, ] response = "" for chunk in api_client.chat_completion(prompt=prompt, stream=True): response += chunk # Очистка и парсинг JSON clean_response = response.replace('```json', '').replace('```', '').strip() try: parsed = json.loads(clean_response) print(f"DeepSeek process time: {datetime.datetime.now() - start_time}") return json.dumps(parsed, ensure_ascii=False, indent=2) except json.JSONDecodeError: return clean_response except Exception as e: logging.error(f"DeepSeek NLP error: {str(e)}") return json.dumps({"error": str(e)}) async def main(): # Тестирование функций # req = 'мойка' # yandex_result = fast_nlp_yandex(req) # print("Yandex:", yandex_result) # # cloud_result = nlp_cloud(req) # print("DeepSeek:", cloud_result) print( generate_spends()) if __name__ == "__main__": asyncio.run(main())