metaGenerator / app.py
Triok1's picture
Update app.py
78b6d85 verified
raw
history blame
3.34 kB
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
)