android-API / app.py
hasmar03's picture
Update app.py
0c3f13f verified
# app.py
import gradio as gr
from functools import lru_cache
from transformers import pipeline
# Ganti sesuai nama repo-mu di HF
ID2MD = "hasmar03/mt5_id2md"
MD2ID = "hasmar03/mt5_md2id" # <- model baru hasil training md→id
@lru_cache(maxsize=2)
def get_pipe(model_id: str):
"""
Cache per-model supaya load cuma sekali (jalan di CPU Spaces).
"""
return pipeline(
task="text2text-generation",
model=model_id,
tokenizer=model_id,
device=-1, # CPU (gratis)
)
def translate(direction: str, text: str, max_new_tokens: int = 64) -> str:
text = (text or "").strip()
if not text:
return ""
# pilih model berdasar arah
model_id = ID2MD if direction == "id2md" else MD2ID
# prefix sesuai format training
prompt = f"translate {direction}: {text}"
out = get_pipe(model_id)(
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",
)
# kompatibel Gradio 4.x/5.x
try:
demo.queue()
except TypeError:
try:
demo.queue(max_size=12)
except TypeError:
demo.queue(concurrency_count=1, max_size=12)
if __name__ == "__main__":
demo.launch()