Triok1 commited on
Commit
fff4dbb
·
verified ·
1 Parent(s): 9eb7ca9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -31
app.py CHANGED
@@ -3,50 +3,66 @@ 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,
@@ -56,7 +72,9 @@ demo = gr.Interface(
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()
 
 
3
  import gradio as gr
4
  import json
5
  import re
6
+ import os
7
 
8
+ # Создаем папку для кэша (если используется)
9
+ os.makedirs(".gradio/cached_examples", exist_ok=True)
10
+
11
+ # Загрузка модели с обработкой предупреждений
12
+ tokenizer = AutoTokenizer.from_pretrained(
13
+ "cointegrated/rut5-base-multitask",
14
+ legacy=False
15
+ )
16
  model = T5ForConditionalGeneration.from_pretrained("cointegrated/rut5-base-multitask")
17
 
18
  def generate_meta_tags(description):
19
+ try:
20
+ prompt = f"""
21
  Сгенерируй SEO-метатеги для карточки товара на основе описания ниже.
 
22
  Описание товара:
23
  {description.strip()}
 
24
  Требования:
25
  - title: до 60 символов, цепляющий заголовок с ключевыми словами
26
  - description: до 160 символов, краткое описание преимуществ
 
27
  Формат вывода (строго JSON):
28
  {{"title": "...", "description": "..."}}
29
  """
30
+
31
+ inputs = tokenizer(prompt, return_tensors="pt", max_length=512, truncation=True)
32
+
33
+ with torch.no_grad():
34
+ outputs = model.generate(
35
+ **inputs,
36
+ max_new_tokens=200,
37
+ do_sample=True,
38
+ temperature=0.5,
39
+ top_k=50,
40
+ num_beams=3,
41
+ eos_token_id=tokenizer.eos_token_id
42
+ )
43
+
44
+ generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
45
+
46
+ # Улучшенная обработка JSON
47
+ try:
48
+ json_str = re.search(r'\{.*\}', generated_text, re.DOTALL)
49
+ if json_str:
50
+ result = json.loads(json_str.group())
51
+ # Проверяем длину полей
52
+ result["title"] = result["title"][:60]
53
+ result["description"] = result["description"][:160]
54
+ return result
55
+ except:
56
+ pass
57
+
58
+ # Фоллбэк
59
  title = re.sub(r'[^\w\s]', '', description)[:60]
60
  desc = re.sub(r'[^\w\s]', '', description)[:160]
61
+ return {"title": title, "description": desc}
62
+
63
+ except Exception as e:
64
+ print(f"Error: {e}")
65
+ return {"title": "Ошибка генерации", "description": "Попробуйте другое описание"}
66
 
67
  demo = gr.Interface(
68
  fn=generate_meta_tags,
 
72
  ["Смартфон Samsung Galaxy S23 с экраном 6.1\", 8 ГБ ОЗУ, 128 ГБ памяти, камерой 50 МП"],
73
  ["Электрическая зубная щётка Oral-B Pro 3 3000 с датчиком давления и 3 насадками"]
74
  ],
75
+ title="Генератор SEO-метатегов для маркетплейсов",
76
+ allow_flagging="never"
77
  )
78
 
79
+ if __name__ == "__main__":
80
+ demo.launch(server_name="0.0.0.0", server_port=7860)