Spaces:
Sleeping
Sleeping
File size: 4,998 Bytes
a90ada2 3a75e4a 78b6d85 a90ada2 0148b1c fff4dbb 0148b1c a90ada2 0148b1c 0d6e36f 0b1dd8d 0d6e36f 0b1dd8d 78b6d85 0148b1c 259ce62 0148b1c 3c9784d 0148b1c 78b6d85 0148b1c a90ada2 0148b1c 78b6d85 0148b1c 78b6d85 0148b1c a90ada2 0148b1c |
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 |
from transformers import AutoTokenizer, T5ForConditionalGeneration
import torch
import gradio as gr
import re
import json
tokenizer = AutoTokenizer.from_pretrained("cointegrated/rut5-base-multitask", legacy=False)
model = T5ForConditionalGeneration.from_pretrained("cointegrated/rut5-base-multitask")
def smart_truncate(text, max_len):
if len(text) <= max_len:
return text
return text[:text[:max_len+1].rfind(' ')].strip()
def generate_meta(description):
# Упрощенный промт с примерами
prompt = f"""
Описание: Fenix ARB-L18-4000U— высокопроизводительный перезаряжаемый литий-ионный аккумулятор стандартного размера 18650. Перезаряжаемая батарея обладает высокой емкостью 4000 мАч, которая обеспечивает длительное время работы электронных устройств. Элемент питания идеально подходит для мощных фонарей Fenix.
Аккумулятор поддерживает три различных варианта зарядки: с помощью зарядного устройства, через порт Type-C фонаря Fenix, а также через собственный встроенный порт Type-C. Универсальность зарядки обеспечивает удобство использования в любых условиях.
Стабильный выходной ток 7А, а также отличные теплоотводящие характеристики предотвращают перегрев батареи. В конструкции аккумулятора предусмотрены вентиляционные отверстия для сброса давления.
Многоуровневая система защиты обеспечивает безопасное использование и высокую производительность литий-ионного аккумулятора. Устройство обладает защитой от перезаряда, перегрузки по току, переразряда, короткого замыкания. Отсутствие в составе ртути и свинца сводит к минимуму негативное воздействие на окружающую среду.
В аккумуляторе отсутствует “эффект памяти”. После 500 полных циклов заряда/разряда аккумулятор ARB-L18-4000U сохраняет до 70% первоначальной емкости, что делает его использование выгодным и экономичным. Рекомендуемая сила тока зарядных устройств составляет 800 мА. Максимальное значение может достигать 4А. При зарядке через порт Type-C — 1.5 A.
→ Сгенерируй SEO title (до 60 символов) и description (до 160 символов) в JSON.
Вывод ТОЛЬКО как 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,
num_beams=5,
early_stopping=True,
no_repeat_ngram_size=2
)
try:
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
json_data = json.loads(re.search(r'\{.*\}', result, re.DOTALL).group())
# Принудительная постобработка
if "Fenix" not in json_data["title"]:
json_data["title"] = f"Аккумулятор Fenix {json_data['title']}"
return {
"title": smart_truncate(json_data["title"], 60),
"description": smart_truncate(json_data["description"], 160)
}
except:
# Фоллбэк
clean_text = re.sub(r'\s+', ' ', description)
return {
"title": smart_truncate(f"Аккумулятор Fenix {clean_text}", 60),
"description": smart_truncate(clean_text, 160)
}
# Интерфейс
with gr.Blocks() as app:
gr.Markdown("## Генератор метатегов (контроль длины)")
inp = gr.Textbox(label="Описание товара", lines=7)
btn = gr.Button("Сгенерировать")
with gr.Row():
out_title = gr.Textbox(label="Title (до 60 символов)", interactive=False)
out_desc = gr.Textbox(label="Description (до 160 символов)", lines=3, interactive=False)
btn.click(generate_meta, inputs=inp, outputs=[out_title, out_desc])
app.launch() |