Spaces:
Sleeping
Sleeping
File size: 3,047 Bytes
a90ada2 3a75e4a 78b6d85 a90ada2 3c9784d 78b6d85 3c9784d 78b6d85 3c9784d 78b6d85 fff4dbb 78b6d85 a90ada2 3c9784d fff4dbb 3c9784d fff4dbb 3c9784d 78b6d85 3c9784d 78b6d85 2be3559 259ce62 78b6d85 3c9784d 259ce62 78b6d85 fff4dbb 78b6d85 fff4dbb 78b6d85 fff4dbb 3c9784d 78b6d85 fff4dbb 78b6d85 3c9784d fff4dbb 3c9784d 78b6d85 3c9784d 78b6d85 a90ada2 78b6d85 3c9784d 78b6d85 3c9784d 78b6d85 3c9784d 78b6d85 3c9784d 78b6d85 3c9784d 78b6d85 a90ada2 fff4dbb 3c9784d |
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 |
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 if torch.cuda.is_available() else torch.float32
)
return tokenizer, model
tokenizer, model = load_model()
# Функция генерации мета-тегов
def generate_meta_tags(description):
try:
# Формируем четкий промт
prompt = f"""
Сгенерируй SEO-метатеги для товара на основе описания.
Требования:
- 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:
tags = json.loads(json_match.group())
# Проверяем и обрезаем длину
return {
"title": tags.get("title", "")[:60],
"description": tags.get("description", "")[:160]
}
except Exception as e:
print(f"Error: {e}")
# Fallback вариант
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("## Генератор мета-тегов для товаров")
with gr.Row():
with gr.Column():
input_desc = gr.Textbox(
label="Введите описание товара",
placeholder="Например: Смартфон Samsung Galaxy S23...",
lines=5
)
btn = gr.Button("Сгенерировать", variant="primary")
with gr.Column():
output_tags = gr.JSON(label="Результат")
btn.click(
fn=generate_meta_tags,
inputs=input_desc,
outputs=output_tags
)
if __name__ == "__main__":
app.launch(server_name="0.0.0.0", server_port=7860) |