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) |