jing-ju commited on
Commit
f6b7ae2
·
verified ·
1 Parent(s): 8577247

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -16
app.py CHANGED
@@ -20,6 +20,13 @@ DEFAULT_MODEL = os.getenv("HYMT_MODEL", "tencent/Hunyuan-MT-7B-fp8")
20
  # Model cố định cho API
21
  FIXED_MODEL = "tencent/Hunyuan-MT-7B-fp8"
22
 
 
 
 
 
 
 
 
23
  # =========================
24
  # NGÔN NGỮ & PROMPT
25
  # =========================
@@ -69,8 +76,8 @@ ZH_CODES = {"zh", "zh-Hant", "yue"}
69
 
70
  def build_prompt(src_lang: str, tgt_lang: str, text: str) -> str:
71
  """
72
- Prompt template tham khảo từ model card:
73
- - Nếu có tiếng Trung (zh/zh-Hant/yue) ở nguồn hoặc đích -> dùng template tiếng Trung
74
  - Nếu không -> template tiếng Anh
75
  """
76
  txt = (text or "").strip()
@@ -122,13 +129,11 @@ def translate(text: str, src_code: str, tgt_code: str, model_choice: str) -> str
122
  # =========================
123
  # RATE LIMIT THEO IP (IN-MEMORY)
124
  # =========================
125
- # SỬA TẠI ĐÂY nếu muốn: tối đa bao nhiêu request / mỗi cửa sổ thời gian
126
  RATE_WINDOW_SEC = int(os.getenv("RATE_WINDOW_SEC", "60")) # ví dụ: 60 giây
127
  RATE_MAX_REQ = int(os.getenv("RATE_MAX_REQ", "10")) # ví dụ: 10 request / IP / 60s
128
 
129
  _ip_buckets: dict[str, deque] = defaultdict(deque)
130
 
131
-
132
  def _rate_limited(request: gr.Request) -> Tuple[bool, str]:
133
  """
134
  Trả (ok, msg). ok=False nếu vượt ngưỡng.
@@ -202,7 +207,13 @@ def build_ui() -> gr.Blocks:
202
  tgt_code = LABEL2CODE[tgt_label]
203
  return translate(text, src_code, tgt_code, model_id)
204
 
205
- btn.click(_on_translate, [inp, src, tgt, model_choice], [out])
 
 
 
 
 
 
206
 
207
  gr.Markdown(
208
  """
@@ -237,8 +248,8 @@ def api_translate_fixed(text: str, src_code: str, tgt_code: str, request: gr.Req
237
 
238
  def build_api_interface() -> gr.Interface:
239
  """
240
- Tạo Interface riêng để có endpoint REST.
241
- - Endpoint kiểu /run/<function_name> (nếu Gradio/HF hỗ trợ)
242
  - Hoặc /run/predict với fn_index tương ứng
243
  """
244
  return gr.Interface(
@@ -250,7 +261,8 @@ def build_api_interface() -> gr.Interface:
250
  ],
251
  outputs=gr.Textbox(label="translation"),
252
  title="Hunyuan-MT Fixed API",
253
- description="POST JSON tới endpoint để nhận bản dịch. Model cố định: tencent/Hunyuan-MT-7B-fp8."
 
254
  )
255
 
256
 
@@ -264,12 +276,9 @@ if __name__ == "__main__":
264
  # Gộp UI + API vào cùng server
265
  demo = gr.TabbedInterface([ui_app, api_iface], tab_names=["App", "API"])
266
 
267
- # Giới hạn đồng thời & hàng chờ (có thể chỉnh bằng biến môi trường)
268
- # SỬA TẠI ĐÂY nếu muốn thay đổi:
269
- CONCURRENCY = int(os.getenv("GRADIO_CONCURRENCY", "2")) # ví dụ: 2 job chạy song song
270
- QUEUE_MAX = int(os.getenv("GRADIO_QUEUE_MAX", "20")) # ví dụ: 20 job có thể chờ
271
-
272
- demo = demo.queue(concurrency_count=CONCURRENCY, max_size=QUEUE_MAX, status_update_rate=2)
273
 
274
- # Bật REST API
275
- demo.launch(enable_api=True)
 
20
  # Model cố định cho API
21
  FIXED_MODEL = "tencent/Hunyuan-MT-7B-fp8"
22
 
23
+ # Giới hạn đồng thời theo event (thay cho concurrency_count cũ)
24
+ UI_CONCURRENCY_LIMIT = int(os.getenv("UI_CONCURRENCY_LIMIT", "2")) # nút Dịch
25
+ API_CONCURRENCY_LIMIT = int(os.getenv("API_CONCURRENCY_LIMIT", "2")) # endpoint API
26
+
27
+ # Số worker tổng (tuỳ chọn): ảnh hưởng thread pool của server
28
+ LAUNCH_MAX_THREADS = int(os.getenv("LAUNCH_MAX_THREADS", "40"))
29
+
30
  # =========================
31
  # NGÔN NGỮ & PROMPT
32
  # =========================
 
76
 
77
  def build_prompt(src_lang: str, tgt_lang: str, text: str) -> str:
78
  """
79
+ Prompt template:
80
+ - Nếu có tiếng Trung (zh/zh-Hant/yue) ở nguồn hoặc đích -> template tiếng Trung
81
  - Nếu không -> template tiếng Anh
82
  """
83
  txt = (text or "").strip()
 
129
  # =========================
130
  # RATE LIMIT THEO IP (IN-MEMORY)
131
  # =========================
 
132
  RATE_WINDOW_SEC = int(os.getenv("RATE_WINDOW_SEC", "60")) # ví dụ: 60 giây
133
  RATE_MAX_REQ = int(os.getenv("RATE_MAX_REQ", "10")) # ví dụ: 10 request / IP / 60s
134
 
135
  _ip_buckets: dict[str, deque] = defaultdict(deque)
136
 
 
137
  def _rate_limited(request: gr.Request) -> Tuple[bool, str]:
138
  """
139
  Trả (ok, msg). ok=False nếu vượt ngưỡng.
 
207
  tgt_code = LABEL2CODE[tgt_label]
208
  return translate(text, src_code, tgt_code, model_id)
209
 
210
+ # Đặt concurrency_limit ngay trên event listener (chuẩn mới)
211
+ btn.click(
212
+ _on_translate,
213
+ [inp, src, tgt, model_choice],
214
+ [out],
215
+ concurrency_limit=UI_CONCURRENCY_LIMIT
216
+ )
217
 
218
  gr.Markdown(
219
  """
 
248
 
249
  def build_api_interface() -> gr.Interface:
250
  """
251
+ Interface riêng để có endpoint REST.
252
+ - /run/api_translate_fixed (nếu platform hỗ trợ)
253
  - Hoặc /run/predict với fn_index tương ứng
254
  """
255
  return gr.Interface(
 
261
  ],
262
  outputs=gr.Textbox(label="translation"),
263
  title="Hunyuan-MT Fixed API",
264
+ description="POST JSON tới endpoint để nhận bản dịch. Model cố định: tencent/Hunyuan-MT-7B-fp8.",
265
+ concurrency_limit=API_CONCURRENCY_LIMIT, # ✅ giới hạn đồng thời cho API
266
  )
267
 
268
 
 
276
  # Gộp UI + API vào cùng server
277
  demo = gr.TabbedInterface([ui_app, api_iface], tab_names=["App", "API"])
278
 
279
+ # Hàng chờ: KHÔNG dùng concurrency_count nữa!
280
+ QUEUE_MAX = int(os.getenv("GRADIO_QUEUE_MAX", "20")) # số job thể chờ
281
+ demo = demo.queue(max_size=QUEUE_MAX, status_update_rate=2)
 
 
 
282
 
283
+ # Bật REST API; (tuỳ chọn) khống chế thread tổng bằng max_threads
284
+ demo.launch(enable_api=True, max_threads=LAUNCH_MAX_THREADS)