Spaces:
Running
Running
import gradio as gr | |
import requests | |
import json | |
import os | |
import time | |
what = [ | |
"Новый Год", "День Рождения", "Рождество Христово", "День защитника Отечества (23 февраля)", "Международный женский день (8 марта)", "Праздник Весны и Труда (1 мая)", "День Победы (9 мая)", "День России (12 июня)", "День народного единства (4 ноября)", "Старый Новый год", "Масленица", "Пасха", "Троица", "День знаний (1 сентября)", "День матери (последнее воскресенье ноября)" | |
] | |
whom = [ | |
"Маме", "Папе", "Родителям", "Ребенку", "Детям", "Сыну", "Дочери", "Внуку", "Внукам", "Бабушке", "Дедушке", "Сестре", "Брату", "Племяннику", "Племяннице", "Другу", "Подруге", "Друзьям", "Подругам", "Супругу", "Супруге", "Партнеру", "Партнерше", "Коллеге", "Коллегам", "Начальнику", "Начальнице", "Боссу", "Ментору", "Учителю", "Учителям", "Студенту", "Студентке", "Клиенту", "Клиентке", "Пациенту", "Пациентке", "Члену семьи", "Членам семьи", "Теще", "Свекру", "Свекрови", "Законному отцу", "Законной матери", "Законным родителям", "Законному ребенку", "Законным детям", "Члену команды", "Членам команды", "Коллеге по работе", "Коллегам по работе", "Коллеге по учебе", "Коллегам по учебе", "Любимому", "Любимой", "Родственнику", "Родственнице", "Родственникам", "Знакомому", "Знакомой", "Знакомым", "Соседу", "Соседке", "Соседям", "Однокласснику", "Однокласснице", "Одноклассникам", "Одногруппнику", "Одногруппнице", "Одногруппникам", "Куму", "Куме", "Крестнику", "Крестнице", "Крестным", "Руководителю", "Подчиненному", "Подчиненным", "Преподавателю", "Преподавателям", "Воспитаннику", "Воспитанникам", "Ученику", "Ученикам", "Наставнику", "Консультанту", "Специалисту", "Юбиляру", "Имениннику", "Имениннице" | |
] | |
# Функция для генерации текста с потоковой передачей | |
def generate(whomtb="Бабушке", fromtb="Внука", whattb="Новый Год", doptb=""): | |
if not whomtb or not whattb: | |
yield "Пожалуйста, заполните все обязательные поля." | |
return | |
system_role = """Ты поздравитель, написатель шикарных, искренних поздравлений. Пользователь будет писать с чем поздравить, кого и возможно дополнительную информацию. Твоя задача - написать по запросу пользователя ИДЕАЛЬНОЕ поздравление. Без форматирования""" | |
user_msg = f"На праздник: '{whattb}', кому: '{whomtb}', от: '{fromtb}', дополнительно: '{doptb}'" | |
headers = { | |
'Content-Type': 'application/json', | |
# 'Authorization': f'Bearer {os.getenv("API_KEY")}' | |
} | |
payload = { | |
'messages': [{'role': 'system', 'content': system_role}, {'role': 'user', 'content': user_msg}], | |
'max_tokens': 2500, | |
'model': "openai", | |
'stream': True # Включаем потоковую передачу | |
} | |
try: | |
response = requests.post(os.getenv("BASE_URL"), headers=headers, json=payload, stream=True, timeout=200) | |
response.raise_for_status() # Проверяем на ошибки HTTP | |
full_text = "" | |
for chunk in response.iter_lines(): | |
if chunk: | |
try: | |
chunk = chunk.decode('utf-8').replace("data: ", "") | |
if chunk == "[DONE]": | |
break | |
chunk_data = json.loads(chunk) | |
if 'choices' in chunk_data and len(chunk_data['choices']) > 0: | |
text_chunk = chunk_data['choices'][0]['delta'].get('content', "") | |
full_text += text_chunk | |
yield full_text # Выводим текст как итератор | |
except json.JSONDecodeError: | |
continue | |
if not full_text: | |
yield "Не удалось получить ответ от сервера." | |
except requests.exceptions.RequestException as e: | |
print(f"Ошибка запроса: {e}") | |
yield f"Ошибка запроса!" | |
# Ссылка на файл CSS | |
css_url = "https://neurixyufi-aihub.static.hf.space/style.css" | |
# Получение CSS по ссылке | |
response = requests.get(css_url) | |
css = response.text + ".gradio-container{max-width: 700px !important} h1{text-align:center}" | |
# UI | |
with gr.Blocks(css=css) as demo: | |
gr.Markdown("# Поздравитель") | |
with gr.Column(): | |
with gr.Row(): | |
fromtb = gr.Textbox(show_label=True, placeholder="Внука", label="От кого", interactive=True, container=True,) | |
whomtb = gr.Textbox(show_label=True, placeholder="Бабушке", label="Кому", interactive=True, container=True,) | |
with gr.Row(): | |
whattb = gr.Textbox(show_label=True, placeholder="Новый Год", label="Праздник", interactive=True, container=True,) | |
with gr.Row(): | |
doptb = gr.Textbox(show_label=True, placeholder="50-летней", label="Дополнительно") | |
with gr.Row(): | |
text_button = gr.Button("Поздравить", variant='primary') | |
with gr.Row(): | |
with gr.Column(): | |
text_output = gr.Textbox(show_label=False, value="Здесь будет ваше поздравление.", container=True) | |
text_button.click(generate, inputs=[whomtb, fromtb, whattb, doptb], outputs=[text_output], concurrency_limit=250) | |
demo.queue(max_size=250, api_open=False).launch() |