Spaces:
Sleeping
Sleeping
| from transformers import AutoTokenizer, T5ForConditionalGeneration | |
| import torch | |
| import gradio as gr | |
| import re | |
| # Загрузка модели и токенизатора | |
| tokenizer = AutoTokenizer.from_pretrained("cointegrated/rut5-base-multitask") | |
| model = T5ForConditionalGeneration.from_pretrained("cointegrated/rut5-base-multitask") | |
| def generate_meta_tags(description): | |
| description = description.strip() | |
| # Формируем чёткий и понятный промт | |
| prompt = """ | |
| Описание товара: | |
| {description} | |
| Задача: создать SEO мета-теги для этого товара. | |
| Формат вывода: | |
| {"title": "SEO заголовок до 60 символов", "description": "SEO описание до 160 символов"} | |
| """.format(description=description) | |
| inputs = tokenizer(prompt, return_tensors="pt") | |
| with torch.no_grad(): | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=200, | |
| pad_token_id=tokenizer.eos_token_id, | |
| eos_token_id=tokenizer.eos_token_id, | |
| do_sample=True, | |
| temperature=0.7 | |
| ) | |
| generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True).strip() | |
| # Проверяем, является ли вывод JSON | |
| if generated_text.startswith("{") and generated_text.endswith("}"): | |
| # Если JSON валидный — возвращаем как есть | |
| return generated_text.replace('\n', ' ').replace('“', '"').replace('”', '"') | |
| else: | |
| # Если не получилось — формируем безопасный вариант | |
| title = description[:60] # Берём начало описания как title | |
| description_short = description[:160] | |
| return '{"title": "%s", "description": "%s"}' % ( | |
| title.replace('"', "").replace("\\", ""), | |
| description_short.replace('"', "").replace("\\", "") | |
| ) | |
| # Интерфейс Gradio | |
| demo = gr.Interface( | |
| fn=generate_meta_tags, | |
| inputs=gr.Textbox(label="Введите описание товара", lines=10), | |
| outputs=gr.Textbox(label="Сгенерированные мета-теги"), | |
| title="SEO Meta Tag Generator", | |
| description="Генерация meta-title и description на основе описания товара" | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |