Spaces:
Sleeping
Sleeping
from transformers import AutoTokenizer, T5ForConditionalGeneration | |
import torch | |
import gradio as gr | |
import json | |
import re | |
import os | |
# Создаем папку для кэша (если используется) | |
os.makedirs(".gradio/cached_examples", exist_ok=True) | |
# Загрузка модели с обработкой предупреждений | |
tokenizer = AutoTokenizer.from_pretrained( | |
"cointegrated/rut5-base-multitask", | |
legacy=False | |
) | |
model = T5ForConditionalGeneration.from_pretrained("cointegrated/rut5-base-multitask") | |
def generate_meta_tags(description): | |
try: | |
prompt = f""" | |
Сгенерируй SEO-метатеги для карточки товара на основе описания ниже. | |
Описание товара: | |
{description.strip()} | |
Требования: | |
- title: до 60 символов, цепляющий заголовок с ключевыми словами | |
- description: до 160 символов, краткое описание преимуществ | |
Формат вывода (строго JSON): | |
{{"title": "...", "description": "..."}} | |
""" | |
inputs = tokenizer(prompt, return_tensors="pt", max_length=512, truncation=True) | |
with torch.no_grad(): | |
outputs = model.generate( | |
**inputs, | |
max_new_tokens=200, | |
do_sample=True, | |
temperature=0.5, | |
top_k=50, | |
num_beams=3, | |
eos_token_id=tokenizer.eos_token_id | |
) | |
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
# Улучшенная обработка JSON | |
try: | |
json_str = re.search(r'\{.*\}', generated_text, re.DOTALL) | |
if json_str: | |
result = json.loads(json_str.group()) | |
# Проверяем длину полей | |
result["title"] = result["title"][:60] | |
result["description"] = result["description"][:160] | |
return result | |
except: | |
pass | |
# Фоллбэк | |
title = re.sub(r'[^\w\s]', '', description)[:60] | |
desc = re.sub(r'[^\w\s]', '', description)[:160] | |
return {"title": title, "description": desc} | |
except Exception as e: | |
print(f"Error: {e}") | |
return {"title": "Ошибка генерации", "description": "Попробуйте другое описание"} | |
demo = gr.Interface( | |
fn=generate_meta_tags, | |
inputs=gr.Textbox(label="Описание товара", lines=5), | |
outputs=gr.JSON(label="Мета-теги"), | |
examples=[ | |
["Смартфон Samsung Galaxy S23 с экраном 6.1\", 8 ГБ ОЗУ, 128 ГБ памяти, камерой 50 МП"], | |
["Электрическая зубная щётка Oral-B Pro 3 3000 с датчиком давления и 3 насадками"] | |
], | |
title="Генератор SEO-метатегов для маркетплейсов", | |
allow_flagging="never" | |
) | |
if __name__ == "__main__": | |
demo.launch(server_name="0.0.0.0", server_port=7860) |