feliksius commited on
Commit
919c43d
·
verified ·
1 Parent(s): 64f98e1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -28
app.py CHANGED
@@ -1,7 +1,11 @@
1
- import gradio as gr
2
  from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
3
  import torch
4
  from langdetect import detect, LangDetectException
 
 
 
 
5
 
6
  # Load model dan tokenizer
7
  model_name = "facebook/m2m100_418M"
@@ -14,21 +18,25 @@ try:
14
  except Exception as e:
15
  raise Exception(f"Gagal memuat model: {str(e)}")
16
 
17
- # Fungsi terjemahan
18
- def translate_text(text, source_lang=None):
19
  try:
 
 
 
 
20
  # Autodeteksi bahasa jika source_lang tidak diberikan
21
  if not source_lang:
22
  try:
23
  detected_lang = detect(text)
24
  if detected_lang not in tokenizer.supported_languages:
25
- return f"Bahasa terdeteksi '{detected_lang}' tidak didukung.", detected_lang
26
  source_lang = detected_lang
27
  except LangDetectException:
28
- return "Gagal mendeteksi bahasa. Harap masukkan kode bahasa sumber.", None
29
  else:
30
  if source_lang not in tokenizer.supported_languages:
31
- return f"Kode bahasa '{source_lang}' tidak didukung.", None
32
 
33
  # Set bahasa sumber
34
  tokenizer.src_lang = source_lang
@@ -41,30 +49,26 @@ def translate_text(text, source_lang=None):
41
  )
42
  translated_text = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
43
 
44
- return translated_text, source_lang
45
 
46
  except Exception as e:
47
- return f"Error: {str(e)}", None
48
 
49
- # Buat antarmuka Gradio
50
- iface = gr.Interface(
51
- fn=translate_text,
52
- inputs=[
53
- gr.Textbox(label="Teks untuk Diterjemahkan"),
54
- gr.Dropdown(
55
- choices=["id", "fr", "es", "de", "ja", ""], # Tambahkan lebih banyak kode bahasa jika perlu
56
- label="Bahasa Sumber (kosongkan untuk autodeteksi)",
57
- value=""
58
- )
59
- ],
60
- outputs=[
61
- gr.Textbox(label="Terjemahan ke Bahasa Inggris"),
62
- gr.Textbox(label="Bahasa Sumber Terdeteksi")
63
- ],
64
- title="M2M100 Translation to English",
65
- description="Masukkan teks untuk diterjemahkan ke bahasa Inggris. Biarkan bahasa sumber kosong untuk autodeteksi."
66
- )
67
 
68
- # Luncurkan aplikasi
69
  if __name__ == "__main__":
70
- iface.launch()
 
 
1
+ from fastapi import FastAPI, HTTPException
2
  from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
3
  import torch
4
  from langdetect import detect, LangDetectException
5
+ from pydantic import BaseModel
6
+
7
+ # Inisialisasi FastAPI
8
+ app = FastAPI(title="M2M100 Translation API")
9
 
10
  # Load model dan tokenizer
11
  model_name = "facebook/m2m100_418M"
 
18
  except Exception as e:
19
  raise Exception(f"Gagal memuat model: {str(e)}")
20
 
21
+ # Fungsi terjemahan (sama seperti sebelumnya)
22
+ def translate_text(text: str, source_lang: str = None):
23
  try:
24
+ # Validasi input teks
25
+ if not text.strip():
26
+ return {"error": "Teks tidak boleh kosong"}, None
27
+
28
  # Autodeteksi bahasa jika source_lang tidak diberikan
29
  if not source_lang:
30
  try:
31
  detected_lang = detect(text)
32
  if detected_lang not in tokenizer.supported_languages:
33
+ return {"error": f"Bahasa terdeteksi '{detected_lang}' tidak didukung"}, detected_lang
34
  source_lang = detected_lang
35
  except LangDetectException:
36
+ return {"error": "Gagal mendeteksi bahasa. Harap masukkan kode bahasa sumber"}, None
37
  else:
38
  if source_lang not in tokenizer.supported_languages:
39
+ return {"error": f"Kode bahasa '{source_lang}' tidak didukung"}, None
40
 
41
  # Set bahasa sumber
42
  tokenizer.src_lang = source_lang
 
49
  )
50
  translated_text = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
51
 
52
+ return {"translated_text": translated_text}, source_lang
53
 
54
  except Exception as e:
55
+ return {"error": f"Terjemahan gagal: {str(e)}"}, None
56
 
57
+ # Model untuk respons JSON
58
+ class TranslationResponse(BaseModel):
59
+ translated_text: str | None = None
60
+ source_lang: str | None = None
61
+ error: str | None = None
62
+
63
+ # Endpoint API
64
+ @app.get("/translate", response_model=TranslationResponse)
65
+ async def translate(text: str, lang: str | None = None):
66
+ result, detected_lang = translate_text(text, lang)
67
+ if "error" in result:
68
+ raise HTTPException(status_code=400, detail=result["error"])
69
+ return {"translated_text": result["translated_text"], "source_lang": detected_lang}
 
 
 
 
 
70
 
71
+ # Jalankan aplikasi (untuk pengembangan lokal)
72
  if __name__ == "__main__":
73
+ import uvicorn
74
+ uvicorn.run(app, host="0.0.0.0", port=8000)