Spaces:
Running
Running
import gradio as gr | |
import requests | |
#from matplotlib import container | |
#from gradio_autocompletetextbox import AutocompleteTextbox | |
#from numpy import place | |
import json | |
import os | |
what = [ | |
"Новый Год", "День Рождения", "Рождество Христово", "День защитника Отечества (23 февраля)", "Международный женский день (8 марта)", "Праздник Весны и Труда (1 мая)", "День Победы (9 мая)", "День России (12 июня)", "День народного единства (4 ноября)", "Старый Новый год", "Масленица", "Пасха", "Троица", "День знаний (1 сентября)", "День матери (последнее воскресенье ноября)" | |
] | |
whom = [ | |
"Маме", "Папе", "Родителям", "Ребенку", "Детям", "Сыну", "Дочери", "Внуку", "Внукам", "Бабушке", "Дедушке", "Сестре", "Брату", "Племяннику", "Племяннице", "Другу", "Подруге", "Друзьям", "Подругам", "Супругу", "Супруге", "Партнеру", "Партнерше", "Коллеге", "Коллегам", "Начальнику", "Начальнице", "Боссу", "Ментору", "Учителю", "Учителям", "Студенту", "Студентке", "Клиенту", "Клиентке", "Пациенту", "Пациентке", "Члену семьи", "Членам семьи", "Теще", "Свекру", "Свекрови", "Законному отцу", "Законной матери", "Законным родителям", "Законному ребенку", "Законным детям", "Члену команды", "Членам команды", "Коллеге по работе", "Коллегам по работе", "Коллеге по учебе", "Коллегам по учебе", "Любимому", "Любимой", "Родственнику", "Родственнице", "Родственникам", "Знакомому", "Знакомой", "Знакомым", "Соседу", "Соседке", "Соседям", "Однокласснику", "Однокласснице", "Одноклассникам", "Одногруппнику", "Одногруппнице", "Одногруппникам", "Куму", "Куме", "Крестнику", "Крестнице", "Крестным", "Руководителю", "Подчиненному", "Подчиненным", "Преподавателю", "Преподавателям", "Воспитаннику", "Воспитанникам", "Ученику", "Ученикам", "Наставнику", "Консультанту", "Специалисту", "Юбиляру", "Имениннику", "Имениннице" | |
] | |
# Функция для генерации текста | |
def generate(whomtb="Бабушке", fromtb="Внука", pricesl=-1, whattb="Новый Год", doptb=""): | |
if not whomtb or not whattb: | |
return "Здесь будут идеи для подарков, цены и ссылки на ресурсы." | |
system_role = """Ты - Поисковик Подарков (ищи актуальное в интернете, желательно но не обязательно в Яндекс). Пользователь будет давать тебе запрос (если максимальную цену подарка пользователь указал '-1', то значит любая, '0', значит бесплатно, своими руками (подручными материалами)), а ты по нему должен подобрать подарки (по запросу). Модешь предоставлять ссылки на ресурсы, акиуальные цены на доступных в России маркетплейсах. ТОЛЬКО АКТУАЛЬНЫЕ, ТЕКУЩИЕ, РАБОЧИЕ ССЫЛКИ, проверяй. (В основном бери ссылки ozon, wildberries, AliExpress. Ещё если попадётся, то и на товары в физических магазинах на оффициальных сайтах) (Товар, цена и маркдовном ссылка или просто идеи.) В конце ещё идеи как можно красиво оформить подарок). НЕ В КОЕМ СЛУЧАЕ НЕ ДАВАЙ НЕРАБОЧИЕ ССЫЛКИ, ИЛИ ССЫЛКИ НА УЖЕ НЕ СУЩЕСТВУЮЩИЕ ТОВАРЫ! ВСЕГДА СНАЧАЛА ПРОВЕРЯЙ СТРАНИЦЫ ИНАЧЕ НЕ ДОБАВЛЯЙ ССЫЛКУ!""" | |
user_msg = f"Подарок на праздник: '{whattb}', кому: '{whomtb}', от: '{fromtb}', цена подарка до {pricesl}₽, дополнительно: '{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': "searchgpt" | |
} | |
try: | |
response = requests.post(os.getenv("BASE_URL"), headers=headers, json=payload, timeout=200) | |
response.raise_for_status() # Проверяем на ошибки HTTP | |
data = response.json() # Используем response.json() вместо json.loads() | |
if 'choices' in data and len(data['choices']) > 0: | |
congratulation = data['choices'][0]['message']['content'].strip() | |
print("Генерация успешна") | |
return congratulation | |
elif 'error' in data: | |
error_message = data['error']['message'] | |
print(f'Ошибка: {error_message}') | |
return f"Ошибка сервера!" | |
else: | |
print(f'Не удалось написать текст. Ответ сервера: {data}') # Выводим ответ сервера для отладки | |
return "Неизвестная ошибка!" | |
except requests.exceptions.RequestException as e: | |
print(f"Ошибка запроса: {e}") | |
return 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 = AutocompleteTextbox(show_label=True, value="Бабушке", label="Кому", commands=whom, interactive=True, container=True,) | |
whomtb = gr.Textbox(show_label=True, placeholder="Бабушке", label="Кому", interactive=True, container=True,) | |
with gr.Row(): | |
#whattb = AutocompleteTextbox(show_label=True, value="Новый Год", label="Праздник", commands=what, interactive=True, container=True,) | |
whattb = gr.Textbox(show_label=True, placeholder="Новый Год", label="Праздник", interactive=True, container=True,) | |
pricesl = gr.Slider(show_label=True, label="Ценовая категория в ₽, до", minimum=-1, maximum=500000, value=-1, step=1) | |
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.Markdown(show_label=False, value="Здесь будут идеи для подарков, цены и ссылки на ресурсы.", container=True) | |
text_button.click(generate, inputs=[whomtb, fromtb, pricesl, whattb, doptb], outputs=[text_output], concurrency_limit=250) | |
demo.queue(max_size=250, api_open=False).launch() |