Spaces:
Sleeping
Sleeping
File size: 3,336 Bytes
a90ada2 3a75e4a 78b6d85 a90ada2 78b6d85 fff4dbb 78b6d85 a90ada2 78b6d85 fff4dbb 78b6d85 fff4dbb 78b6d85 2be3559 259ce62 78b6d85 259ce62 78b6d85 fff4dbb 78b6d85 fff4dbb 78b6d85 fff4dbb 78b6d85 fff4dbb 78b6d85 fff4dbb 78b6d85 a90ada2 78b6d85 a90ada2 fff4dbb 78b6d85 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
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
) |