File size: 1,878 Bytes
f156c39
f9230a6
 
 
 
f156c39
 
f9230a6
 
f156c39
 
 
 
 
 
 
 
 
 
 
 
 
 
f9230a6
 
f156c39
 
f9230a6
f156c39
f9230a6
f156c39
f9230a6
 
f156c39
 
 
f9230a6
 
 
 
 
 
 
f156c39
f9230a6
f156c39
f9230a6
 
f156c39
 
f9230a6
f156c39
 
f9230a6
f156c39
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# app.py  — Gradio Blocks + REST API bawaan (api_name), lazy-load model
import os
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline

# ===== Konfigurasi =====
MODEL_ID = os.getenv("MODEL_ID", "hasmar03/mt5_id2md")
MAX_LEN  = int(os.getenv("MAX_LEN", "128"))

# ===== Lazy loader =====
pipe = None
def get_pipe():
    global pipe
    if pipe is None:
        tok = AutoTokenizer.from_pretrained(MODEL_ID)
        mdl = AutoModelForSeq2SeqLM.from_pretrained(MODEL_ID)
        pipe = pipeline(
            "text2text-generation",
            model=mdl,
            tokenizer=tok,
            max_length=MAX_LEN,
        )
    return pipe

def _build_prompt(text: str, direction: str):
    # Sesuaikan dengan skema training Anda
    if direction == "id2md" or direction == "Indonesia → Mandar":
        return f"translate Indonesian to Mandar: {text}"
    elif direction == "md2id" or direction == "Mandar → Indonesia":
        return f"translate Mandar to Indonesian: {text}"
    return text

def translate_fn(text: str, arah: str):
    p = get_pipe()
    prompt = _build_prompt(text, arah)
    out = p(prompt)[0]["generated_text"]
    return out

with gr.Blocks(title="Mandar ↔ Indonesia Translator") as demo:
    gr.Markdown("### Mandar ↔ Indonesia Translator")
    arah = gr.Radio(
        ["Indonesia → Mandar", "Mandar → Indonesia"],
        value="Indonesia → Mandar",
        label="Arah",
    )
    src = gr.Textbox(label="Teks sumber", lines=3, placeholder="Ketik teks…")
    btn = gr.Button("Terjemahkan")
    out = gr.Textbox(label="Hasil", lines=3)
    # api_name membuat REST endpoint: /api/predict/translate
    btn.click(translate_fn, inputs=[src, arah], outputs=out, api_name="translate")

# Antrian (aman untuk Space)
demo.queue()

# Opsional: saat run lokal
if __name__ == "__main__":
    demo.launch()