Spaces:
Sleeping
Sleeping
from transformers import AutoTokenizer, T5ForConditionalGeneration | |
import torch | |
import gradio as gr | |
import re | |
import json | |
# Инициализация модели и токенизатора | |
def load_model(): | |
tokenizer = AutoTokenizer.from_pretrained( | |
"cointegrated/rut5-base-multitask", | |
legacy=False # Отключаем предупреждения | |
) | |
model = T5ForConditionalGeneration.from_pretrained( | |
"cointegrated/rut5-base-multitask", | |
torch_dtype=torch.float16 # Экономия памяти | |
) | |
return tokenizer, model | |
tokenizer, model = load_model() | |
# Основная функция генерации | |
def generate_seo_tags(description): | |
try: | |
# Подготовка промта | |
prompt = f""" | |
Сгенерируй SEO-метатеги title и description для товара. | |
Требования: | |
- Title: до 60 символов, содержит ключевые слова | |
- Description: до 160 символов, описание преимуществ | |
Описание товара: | |
{description.strip()} | |
Выведи только JSON: | |
{{"title": "...", "description": "..."}} | |
""" | |
# Токенизация и генерация | |
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=512) | |
with torch.no_grad(): | |
outputs = model.generate( | |
**inputs, | |
max_new_tokens=200, | |
num_beams=3, | |
do_sample=True, | |
temperature=0.5, | |
early_stopping=True | |
) | |
# Декодирование и очистка результата | |
result = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
json_match = re.search(r'\{.*\}', result, re.DOTALL) | |
if json_match: | |
seo_tags = json.loads(json_match.group()) | |
# Проверка и обрезка по длине | |
seo_tags["title"] = seo_tags.get("title", "")[:60] | |
seo_tags["description"] = seo_tags.get("description", "")[:160] | |
return seo_tags | |
except Exception as e: | |
print(f"Ошибка: {e}") | |
# Фоллбэк если что-то пошло не так | |
clean_text = re.sub(r'[^\w\s]', '', description) | |
return { | |
"title": clean_text[:60], | |
"description": clean_text[:160] | |
} | |
# Интерфейс Gradio | |
with gr.Blocks(title="SEO Генератор") as app: | |
gr.Markdown("## Генератор SEO-метатегов для товаров") | |
with gr.Row(): | |
with gr.Column(): | |
input_text = gr.Textbox( | |
label="Описание товара", | |
placeholder="Введите описание товара...", | |
lines=5 | |
) | |
submit_btn = gr.Button("Сгенерировать") | |
with gr.Column(): | |
output_json = gr.JSON( | |
label="SEO-метатеги", | |
interactive=False | |
) | |
submit_btn.click( | |
fn=generate_seo_tags, | |
inputs=input_text, | |
outputs=output_json | |
) | |
if __name__ == "__main__": | |
app.launch( | |
server_name="0.0.0.0", | |
server_port=7860, | |
show_error=True | |
) |