Triok1 commited on
Commit
259ce62
·
verified ·
1 Parent(s): 3a75e4a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -38
app.py CHANGED
@@ -1,60 +1,62 @@
1
  from transformers import AutoTokenizer, T5ForConditionalGeneration
2
  import torch
3
  import gradio as gr
 
4
  import re
5
 
6
- # Загрузка модели и токенизатора
7
  tokenizer = AutoTokenizer.from_pretrained("cointegrated/rut5-base-multitask")
8
  model = T5ForConditionalGeneration.from_pretrained("cointegrated/rut5-base-multitask")
9
 
10
  def generate_meta_tags(description):
11
- description = description.strip()
 
12
 
13
- # Формируем чёткий и понятный промт
14
- prompt = """
15
  Описание товара:
16
- {description}
17
-
18
- Задача: создать SEO мета-теги для этого товара.
19
- Формат вывода:
20
- {"title": "SEO заголовок до 60 символов", "description": "SEO описание до 160 символов"}
21
- """.format(description=description)
22
-
23
- inputs = tokenizer(prompt, return_tensors="pt")
 
 
 
 
24
  with torch.no_grad():
25
  outputs = model.generate(
26
  **inputs,
27
  max_new_tokens=200,
28
- pad_token_id=tokenizer.eos_token_id,
29
- eos_token_id=tokenizer.eos_token_id,
30
  do_sample=True,
31
- temperature=0.7
32
- )
33
-
34
- generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
35
-
36
- # Проверяем, является ли вывод JSON
37
- if generated_text.startswith("{") and generated_text.endswith("}"):
38
- # Если JSON валидный — возвращаем как есть
39
- return generated_text.replace('\n', ' ').replace('“', '"').replace('”', '"')
40
- else:
41
- # Если не получилось — формируем безопасный вариант
42
- title = description[:60] # Берём начало описания как title
43
- description_short = description[:160]
44
-
45
- return '{"title": "%s", "description": "%s"}' % (
46
- title.replace('"', "").replace("\\", ""),
47
- description_short.replace('"', "").replace("\\", "")
48
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
- # Интерфейс Gradio
51
  demo = gr.Interface(
52
  fn=generate_meta_tags,
53
- inputs=gr.Textbox(label="Введите описание товара", lines=10),
54
- outputs=gr.Textbox(label="Сгенерированные мета-теги"),
55
- title="SEO Meta Tag Generator",
56
- description="Генерация meta-title и description на основе описания товара"
 
 
 
57
  )
58
 
59
- if __name__ == "__main__":
60
- demo.launch()
 
1
  from transformers import AutoTokenizer, T5ForConditionalGeneration
2
  import torch
3
  import gradio as gr
4
+ import json
5
  import re
6
 
 
7
  tokenizer = AutoTokenizer.from_pretrained("cointegrated/rut5-base-multitask")
8
  model = T5ForConditionalGeneration.from_pretrained("cointegrated/rut5-base-multitask")
9
 
10
  def generate_meta_tags(description):
11
+ prompt = f"""
12
+ Сгенерируй SEO-метатеги для карточки товара на основе описания ниже.
13
 
 
 
14
  Описание товара:
15
+ {description.strip()}
16
+
17
+ Требования:
18
+ - title: до 60 символов, цепляющий заголовок с ключевыми словами
19
+ - description: до 160 символов, краткое описание преимуществ
20
+
21
+ Формат вывода (строго JSON):
22
+ {{"title": "...", "description": "..."}}
23
+ """
24
+
25
+ inputs = tokenizer(prompt, return_tensors="pt", max_length=512, truncation=True)
26
+
27
  with torch.no_grad():
28
  outputs = model.generate(
29
  **inputs,
30
  max_new_tokens=200,
 
 
31
  do_sample=True,
32
+ temperature=0.5,
33
+ top_k=50,
34
+ num_beams=3,
35
+ eos_token_id=tokenizer.eos_token_id
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  )
37
+
38
+ generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
39
+
40
+ # Чистка и парсинг результата
41
+ try:
42
+ json_str = re.search(r'\{.*\}', generated_text, re.DOTALL).group()
43
+ result = json.loads(json_str)
44
+ return json.dumps(result, ensure_ascii=False, indent=2)
45
+ except:
46
+ # Фоллбэк, если модель ошибается
47
+ title = re.sub(r'[^\w\s]', '', description)[:60]
48
+ desc = re.sub(r'[^\w\s]', '', description)[:160]
49
+ return json.dumps({"title": title, "description": desc}, ensure_ascii=False)
50
 
 
51
  demo = gr.Interface(
52
  fn=generate_meta_tags,
53
+ inputs=gr.Textbox(label="Описание товара", lines=5),
54
+ outputs=gr.JSON(label="Мета-теги"),
55
+ examples=[
56
+ ["Смартфон Samsung Galaxy S23 с экраном 6.1\", 8 ГБ ОЗУ, 128 ГБ памяти, камерой 50 МП"],
57
+ ["Электрическая зубная щётка Oral-B Pro 3 3000 с датчиком давления и 3 насадками"]
58
+ ],
59
+ title="Генератор SEO-метатегов для маркетплейсов"
60
  )
61
 
62
+ demo.launch()