android-API / app.py
hasmar03's picture
Update app.py
5271b46 verified
raw
history blame
2.45 kB
import gradio as gr
from functools import lru_cache
from transformers import pipeline
MODEL_ID = "hasmar03/mt5_id2md"
@lru_cache(maxsize=1)
def get_pipe():
"""
Cache pipeline supaya model hanya dimuat 1x.
Pakai CPU (device=-1) agar gratisan di Spaces jalan.
"""
return pipeline(
task="text2text-generation",
model=MODEL_ID,
tokenizer=MODEL_ID,
device=-1, # CPU
# framework & dtype otomatis oleh HF/Transformers
)
def translate(direction: str, text: str, max_new_tokens: int = 64) -> str:
if not text or not text.strip():
return ""
# Prefix sesuai format training mT5 kamu
prompt = f"translate {direction}: {text}"
# Setting decoding yang umum untuk terjemahan
# - num_beams memperbaiki kualitas (sedikit lebih lambat tapi OK di CPU kecil)
# - no_repeat_ngram_size mengurangi pengulangan
# - early_stopping untuk hentikan beam kalau sudah cukup baik
out = get_pipe()(
prompt,
max_new_tokens=int(max_new_tokens),
num_beams=5,
do_sample=False,
no_repeat_ngram_size=3,
early_stopping=True,
)[0]["generated_text"]
return out
with gr.Blocks(title="mT5 id↔md Translator (HF Space API)") as demo:
gr.Markdown("# mT5 id↔md Translator (HF Space API)")
with gr.Row():
direction = gr.Dropdown(["id2md", "md2id"], value="id2md", label="Arah")
max_tok = gr.Slider(16, 128, value=64, step=1, label="max_new_tokens")
inp = gr.Textbox(label="Teks sumber", lines=3, placeholder="Ketik kalimat...")
out = gr.Textbox(label="Terjemahan", lines=3)
btn = gr.Button("Terjemahkan", variant="primary")
btn.click(translate, [direction, inp, max_tok], [out], api_name="translate")
gr.Examples(
examples=[
["id2md", "ia terus pulang begitu saja", 64],
["md2id", "tarrus i pole tia", 64],
],
inputs=[direction, inp, max_tok],
outputs=[out],
label="Contoh cepat",
)
# ==== Queue versi-agnostik (jalan di Gradio 4.x & 5.x) ====
try:
# Gradio 5.x (beberapa build menolak argumen apa pun)
demo.queue()
except TypeError:
try:
# Gradio 5.x lain (punya max_size)
demo.queue(max_size=12)
except TypeError:
# Gradio 4.x (pakai concurrency_count)
demo.queue(concurrency_count=1, max_size=12)
if __name__ == "__main__":
demo.launch()