Yermek68 commited on
Commit
5f99d26
·
verified ·
1 Parent(s): 3da7baa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -29
app.py CHANGED
@@ -1,63 +1,74 @@
1
  import gradio as gr
2
- from transformers import pipeline, AutoTokenizer
3
- import threading
4
- import warnings
5
  from langdetect import detect
6
 
 
7
  warnings.filterwarnings("ignore")
 
8
 
9
  models = {}
10
  models_ready = False
11
- init_message = "⏳ Инициализация моделей (1–2 мин)..."
12
 
13
- def load_model_safe(model_name, task="summarization"):
 
14
  try:
15
  print(f"🔄 Загружается модель: {model_name}")
16
  tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False, legacy=True)
17
- model = pipeline(task, model=model_name, tokenizer=tokenizer)
18
- return model
 
 
 
 
 
 
 
 
19
  except Exception as e:
20
  print(f"⚠️ Ошибка загрузки {model_name}: {e}")
21
  return None
22
 
23
  def preload_models():
24
- global models, models_ready, init_message
25
  try:
26
- models["en"] = load_model_safe("facebook/bart-large-cnn")
27
- models["ru"] = load_model_safe("IlyaGusev/mbart_ru_sum_gazeta")
28
- models["multi"] = load_model_safe("csebuetnlp/mT5_multilingual_XLSum")
29
  models_ready = True
30
- init_message = "✅ Все модели успешно загружены!"
31
- print(init_message)
32
  except Exception as e:
33
- init_message = f"❌ Ошибка инициализации моделей: {e}"
 
34
 
 
35
  threading.Thread(target=preload_models, daemon=True).start()
36
 
37
  def summarize_text(text):
38
  if not text.strip():
39
- return "⚠️ Пожалуйста, введите текст."
40
  if not models_ready:
41
- return init_message
42
  try:
43
  lang = detect(text)
44
- if lang == "ru":
45
- model = models["ru"]
46
- elif lang in ("en", "fr", "de", "es"):
47
- model = models["en"]
48
- else:
49
- model = models["multi"]
50
  summary = model(text, max_length=250, min_length=40, do_sample=False)
51
  return summary[0]["summary_text"]
52
  except Exception as e:
53
- return f"⚠️ Ошибка обработки: {e}"
54
 
55
- with gr.Blocks(title="Eroha Summarizer PRO") as iface:
56
- gr.Markdown("## 🧠 **Eroha Summarizer PRO**\nМногоязычный суммаризатор на BART / MBART / mT5\n")
57
- gr.Markdown(init_message)
58
- inp = gr.Textbox(label="Введите текст для суммаризации", lines=12)
59
  out = gr.Textbox(label="Результат суммаризации")
60
  btn = gr.Button("🚀 Суммаризировать")
61
- btn.click(summarize_text, inputs=inp, outputs=out)
62
 
63
- iface.launch(server_name="0.0.0.0", server_port=7860)
 
1
  import gradio as gr
2
+ from transformers import pipeline, AutoTokenizer, logging
3
+ import threading, torch, warnings
 
4
  from langdetect import detect
5
 
6
+ # --- Disable warnings and logs ---
7
  warnings.filterwarnings("ignore")
8
+ logging.set_verbosity_error()
9
 
10
  models = {}
11
  models_ready = False
12
+ status_message = "⏳ Инициализация моделей (1–2 мин)..."
13
 
14
+ def load_model(model_name, task="summarization"):
15
+ """Безопасная загрузка с fallback на legacy-токенайзер и half precision"""
16
  try:
17
  print(f"🔄 Загружается модель: {model_name}")
18
  tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False, legacy=True)
19
+ model_pipe = pipeline(task, model=model_name, tokenizer=tokenizer, device=-1)
20
+ # Оптимизация PyTorch
21
+ if hasattr(model_pipe.model, "half"):
22
+ model_pipe.model = model_pipe.model.half()
23
+ if hasattr(torch, "compile"):
24
+ try:
25
+ model_pipe.model = torch.compile(model_pipe.model, mode="reduce-overhead")
26
+ except Exception:
27
+ pass
28
+ return model_pipe
29
  except Exception as e:
30
  print(f"⚠️ Ошибка загрузки {model_name}: {e}")
31
  return None
32
 
33
  def preload_models():
34
+ global models, models_ready, status_message
35
  try:
36
+ models["en"] = load_model("facebook/bart-large-cnn")
37
+ models["ru"] = load_model("IlyaGusev/mbart_ru_sum_gazeta")
38
+ models["multi"] = load_model("csebuetnlp/mT5_multilingual_XLSum")
39
  models_ready = True
40
+ status_message = "✅ Все модели успешно загружены и оптимизированы!"
41
+ print(status_message)
42
  except Exception as e:
43
+ status_message = f"❌ Ошибка при инициализации моделей: {e}"
44
+ print(status_message)
45
 
46
+ # --- Lazy background loading ---
47
  threading.Thread(target=preload_models, daemon=True).start()
48
 
49
  def summarize_text(text):
50
  if not text.strip():
51
+ return "⚠️ Введите текст для суммаризации."
52
  if not models_ready:
53
+ return status_message
54
  try:
55
  lang = detect(text)
56
+ model = (
57
+ models["ru"] if lang == "ru" else
58
+ models["en"] if lang in ("en", "fr", "de", "es") else
59
+ models["multi"]
60
+ )
 
61
  summary = model(text, max_length=250, min_length=40, do_sample=False)
62
  return summary[0]["summary_text"]
63
  except Exception as e:
64
+ return f"⚠️ Ошибка суммаризации: {e}"
65
 
66
+ with gr.Blocks(title="🧠 Eroha Summarizer PRO v4.0") as app:
67
+ gr.Markdown("## 🧠 **Eroha Summarizer PRO** Multilingual Summarizer (BART / MBART / mT5)")
68
+ status = gr.Markdown(status_message)
69
+ inp = gr.Textbox(label="Введите текст", lines=12, placeholder="Вставьте текст сюда...")
70
  out = gr.Textbox(label="Результат суммаризации")
71
  btn = gr.Button("🚀 Суммаризировать")
72
+ btn.click(fn=summarize_text, inputs=inp, outputs=out)
73
 
74
+ app.launch(server_name="0.0.0.0", server_port=7860)