from langchain.schema import SystemMessage, HumanMessage from langchain_gigachat.chat_models import GigaChat import time import os from dotenv import load_dotenv import gradio as gr import logging from datetime import datetime load_dotenv() auth = os.getenv('GIGA') chat_pro = GigaChat(credentials=auth, model='GigaChat-Max', scope="GIGACHAT_API_CORP", temperature=1.1, profanity_check=False, verify_ssl_certs=False) chat_pro.invoke('Hello!') def min_sec(start): finish = datetime.now() minutes = (finish - start).seconds // 60 if minutes < 10: minutes = '0' + str(minutes) else: minutes = str(minutes) seconds = (finish - start).seconds % 60 if seconds < 10: seconds = '0' + str(seconds) return f'{minutes}:{seconds}' sms_prompt = ['''Напиши три или четыре предложения суммарной длиной от 160 до 250 знаков с учетом пробелов. Начни SMS с указания на пользу продукта. Используй глагол в побудительном наклонении. Не начинай с вопроса. Напиши рекламное SMS для следующего продукта: «Зарплатный проект для предпринимателей. Позволяет зачислять зарплату, отпускные, компенсации и другие виды выплат в любой день. Подключение — по заявке в интернет-банке СберБизнес.». Не изменяй название продукта: «зарплатный проект». Преимущества: «Разные виды зачислений. Можно зачислять в выходные и праздники. Срок зачисления — от 1 минуты. Подключение без визита в банк.». ОБЯЗАТЕЛЬНО используй в SMS один или несколько терминов, касающиеся клиента, которому направляется SMS, из КАЖДОЙ группы: 1. контроль, управлять, экономия, стратегический, обеспечить. Убедись, что написал не меньше трех и не больше четырех предложений суммарной длиной от 160 до 250 знаков с учетом пробелов. Убедись, что SMS начинается с указания на пользу продукта и использования глагола в побудительном наклонении и не начинается с вопроса. Убедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин. Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «зарплатный проект». Убедись, что в SMS есть следующая ключевая информация: «Зачисление зарплаты сотрудникам от 1 минуты 24/7, подключение без визита в банк.». ''', '''Напиши три или четыре предложения суммарной длиной от 160 до 250 знаков с учетом пробелов. Начни SMS с призыва к действию с продуктом. Не начинай с вопроса / Начни сообщение с вопроса, который указывает на пользу продукта для клиента. Обратись в SMS на ты. Напиши рекламное SMS для следующего продукта: «Зарплатный проект для предпринимателей. Позволяет зачислять зарплату, отпускные, компенсации и другие виды выплат в любой день. Подключение — по заявке в интернет-банке СберБизнес.». Не изменяй название продукта: «зарплатный проект». Преимущества: «Разные виды зачислений. Можно зачислять в выходные и праздники. Срок зачисления — от 1 минуты. Подключение без визита в банк.». ОБЯЗАТЕЛЬНО используй в SMS один или несколько терминов, касающиеся клиента, которому направляется SMS, из КАЖДОЙ группы: 1. тренд, лайфхак, свобода, яркий. 2. учитывать, результат, эффективность, контроль, оптимизировать. Убедись, что написал не меньше трех и не больше четырех предложений суммарной длиной от 160 до 250 знаков с учетом пробелов. Убедись, что готовый текст начинается с призыва к действию с продуктом и не начинается с вопроса / Убедись, что готовый текст начинается с вопроса, который указывает на пользу продукта для клиента. Убедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин. Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «зарплатный проект». Убедись, что в SMS есть следующая ключевая информация: «Зачисление зарплаты сотрудникам от 1 минуты 24/7, подключение без визита в банк.». ''', '''Напиши три или четыре предложения суммарной длиной от 160 до 250 знаков с учетом пробелов. Начни SMS с призыва к действию с продуктом. Не начинай с вопроса / Начни сообщение с вопроса, который указывает на пользу продукта для клиента. Обратись в SMS на ты. Напиши рекламное SMS для следующего продукта: «Зарплатный проект для предпринимателей. Позволяет зачислять зарплату, отпускные, компенсации и другие виды выплат в любой день. Подключение — по заявке в интернет-банке СберБизнес.». Не изменяй название продукта: «зарплатный проект». Преимущества: «Разные виды зачислений. Можно зачислять в выходные и праздники. Срок зачисления — от 1 минуты. Подключение без визита в банк.». ОБЯЗАТЕЛЬНО используй в SMS один или несколько терминов, касающиеся клиента, которому направляется SMS, из КАЖДОЙ группы: 1. комфорт, вдохновение, представьте, наслаждаться. 2. тренд, лайфхак, свобода, яркий. Убедись, что написал не меньше трех и не больше четырех предложений суммарной длиной от 160 до 250 знаков с учетом пробелов. Убедись, что готовый текст начинается с призыва к действию с продуктом и не начинается с вопроса / Убедись, что готовый текст начинается с вопроса, который указывает на пользу продукта для клиента. Убедись, что УМЕСТНО использовал КАЖДЫЙ необходимый термин. Убедись, что в SMS без изменений, синонимов и перестановок слов используется наименование продукта: «зарплатный проект». Убедись, что в SMS есть следующая ключевая информация: «Зачисление зарплаты сотрудникам от 1 минуты 24/7, подключение без визита в банк.». ''', ] sms_batch = sms_prompt #* 3 sms_batch = [[HumanMessage(content=x)] for x in sms_batch] def process_sms(): prompt_tokens = 0 completion_tokens = 0 total_tokens = 0 errors = 30 logs = '# Запуск процесса\n' start = datetime.now() yield logs logs += ('### '+ min_sec(start) + ' Запрос 9 sms отправлен. Ждем ответа.\n') answer1 = chat_pro.batch(sms_batch) logs += ('### '+ min_sec(start) + ' Ответы получены.\n') for a in range(len(answer1)): logs += ('### ' + min_sec(start) + f' Ответ {a+1}: \n') prompt_tokens_a = answer1[a].response_metadata['token_usage']['prompt_tokens'] completion_tokens_a = answer1[a].response_metadata['token_usage']['completion_tokens'] total_tokens_a = answer1[a].response_metadata['token_usage']['total_tokens'] logs += f'Токенов промпта: {prompt_tokens_a}\n' logs += f'Токенов сгенерировано: {completion_tokens_a}\n' logs += f'Токенов всего: {total_tokens_a}\n\n' prompt_tokens += answer1[a].response_metadata['token_usage']['prompt_tokens'] completion_tokens += answer1[a].response_metadata['token_usage']['completion_tokens'] total_tokens += answer1[a].response_metadata['token_usage']['total_tokens'] logs += (f'Сгенерированное сообщение:\n {answer1[a].content}\n\n') yield logs logs += f'Входные токены: {prompt_tokens}\n' logs += f'Сгенерированные токены: {completion_tokens}\n' logs += f'Итого: {total_tokens}\n' yield logs with gr.Blocks() as demo: header = gr.Markdown(value='# Проверка многопоточности') run_btn = gr.Button('Запуск генерации 9 сообщений') logs_feed = gr.Markdown(value='# Логи будут отображаться здесь') run_btn.click(process_sms, [], logs_feed) demo.launch(share=True)