Spaces:
Sleeping
Sleeping
| 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) |