feliksius commited on
Commit
56ffb39
·
verified ·
1 Parent(s): e8b7c49

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -14
app.py CHANGED
@@ -3,6 +3,7 @@ from transformers import pipeline
3
  import langdetect
4
  import logging
5
  import os
 
6
 
7
  # Set environment variables for Hugging Face cache
8
  # Ini penting agar model di-cache di lokasi yang benar di dalam container Hugging Face Space
@@ -44,57 +45,67 @@ except Exception as e:
44
 
45
  ---
46
 
47
- ## Fungsi Deteksi Bahasa yang Ditingkatkan
48
 
49
- Ini adalah bagian kunci perbaikannya. Kita akan **normalisasi kode bahasa Mandarin** yang mungkin dideteksi oleh `langdetect`.
50
 
51
  ```python
52
  def detect_language(text: str) -> str:
53
  try:
54
  detected_lang = langdetect.detect(text)
55
- logger.info(f"langdetect detected: '{detected_lang}' for text: '{text[:50]}...'") # Log deteksi awal
 
56
 
57
  # Normalisasi untuk bahasa Mandarin:
58
  # Jika langdetect mengembalikan 'zh-cn', 'zh-tw', 'zh-hk', dll.,
59
  # kita paksa menjadi 'zh' agar sesuai dengan kunci di MODEL_MAP.
60
  if detected_lang.startswith('zh'):
 
61
  return 'zh'
62
 
63
  # Jika bahasa terdeteksi ada di MODEL_MAP, gunakan itu.
64
  # Jika tidak, default ke 'en' (bahasa Inggris).
65
- return detected_lang if detected_lang in MODEL_MAP else "en"
 
 
66
  except Exception as e:
67
- logger.warning(f"Language detection failed for text: '{text[:50]}...' Error: {str(e)}. Defaulting to English.")
68
  return "en"
69
 
70
  ---
71
 
72
- ## Endpoint API untuk Terjemahan
 
 
73
 
74
  ```python
75
  @app.post("/translate")
76
- async def translate(text: str):
77
  """
78
  Menerima teks dan mengembalikannya dalam bahasa Inggris.
79
- Secara otomatis mendeteksi bahasa sumber.
80
  """
81
  if not text:
82
  raise HTTPException(status_code=400, detail="Text input is required.")
83
 
84
  try:
85
- # Deteksi bahasa sumber dari teks
86
- source_lang = detect_language(text)
87
- logger.info(f"Determined source language: '{source_lang}' for translation.")
 
 
 
 
88
 
89
  # Jika bahasa sumber sudah Bahasa Inggris, kembalikan teks aslinya
90
  if source_lang == "en":
91
- logger.info("Source language is English, returning original text.")
92
  return {"translated_text": text}
93
 
94
  # Dapatkan translator yang sesuai dari kamus translators
95
  translator = translators.get(source_lang)
96
 
97
- # Jika tidak ada translator yang mendukung bahasa yang terdeteksi
98
  if not translator:
99
  logger.error(f"No translator found for language: '{source_lang}'.")
100
  raise HTTPException(
@@ -103,7 +114,7 @@ async def translate(text: str):
103
  )
104
 
105
  # Lakukan terjemahan
106
- logger.info(f"Translating from {source_lang}...")
107
  result = translator(text)
108
  translated_text = result[0]["translation_text"]
109
  logger.info(f"Translation successful. Original: '{text[:50]}...', Translated: '{translated_text[:50]}...'")
 
3
  import langdetect
4
  import logging
5
  import os
6
+ from typing import Optional # Import Optional untuk parameter di FastAPI
7
 
8
  # Set environment variables for Hugging Face cache
9
  # Ini penting agar model di-cache di lokasi yang benar di dalam container Hugging Face Space
 
45
 
46
  ---
47
 
48
+ ## Fungsi Deteksi Bahasa yang Ditingkatkan (dengan Logging Detail)
49
 
50
+ Ini adalah bagian kunci perbaikannya dengan penambahan *logging* yang lebih informatif.
51
 
52
  ```python
53
  def detect_language(text: str) -> str:
54
  try:
55
  detected_lang = langdetect.detect(text)
56
+ # Log ini SANGAT PENTING untuk debugging! Ini menunjukkan hasil mentah dari langdetect.
57
+ logger.info(f"langdetect raw result: '{detected_lang}' for text: '{text[:50]}...'")
58
 
59
  # Normalisasi untuk bahasa Mandarin:
60
  # Jika langdetect mengembalikan 'zh-cn', 'zh-tw', 'zh-hk', dll.,
61
  # kita paksa menjadi 'zh' agar sesuai dengan kunci di MODEL_MAP.
62
  if detected_lang.startswith('zh'):
63
+ logger.info(f"Normalizing '{detected_lang}' to 'zh' for Mandarin.")
64
  return 'zh'
65
 
66
  # Jika bahasa terdeteksi ada di MODEL_MAP, gunakan itu.
67
  # Jika tidak, default ke 'en' (bahasa Inggris).
68
+ final_lang = detected_lang if detected_lang in MODEL_MAP else "en"
69
+ logger.info(f"Final determined language: '{final_lang}'. (Based on raw detected: '{detected_lang}')")
70
+ return final_lang
71
  except Exception as e:
72
+ logger.warning(f"Language detection FAILED for text: '{text[:50]}...'. Error: {str(e)}. Defaulting to English.")
73
  return "en"
74
 
75
  ---
76
 
77
+ ## Endpoint API untuk Terjemahan (dengan Opsi Override Bahasa Sumber)
78
+
79
+ Ini adalah bagian kunci perbaikannya dengan penambahan parameter `source_lang_override`.
80
 
81
  ```python
82
  @app.post("/translate")
83
+ async def translate(text: str, source_lang_override: Optional[str] = None):
84
  """
85
  Menerima teks dan mengembalikannya dalam bahasa Inggris.
86
+ Secara otomatis mendeteksi bahasa sumber, atau bisa di-override oleh pengguna.
87
  """
88
  if not text:
89
  raise HTTPException(status_code=400, detail="Text input is required.")
90
 
91
  try:
92
+ # Tentukan bahasa sumber: gunakan override jika diberikan dan valid, kalau tidak, deteksi otomatis.
93
+ if source_lang_override and source_lang_override in MODEL_MAP:
94
+ source_lang = source_lang_override
95
+ logger.info(f"Source language overridden by user to: '{source_lang_override}'.")
96
+ else:
97
+ source_lang = detect_language(text)
98
+ logger.info(f"Determined source language for translation: '{source_lang}'.")
99
 
100
  # Jika bahasa sumber sudah Bahasa Inggris, kembalikan teks aslinya
101
  if source_lang == "en":
102
+ logger.info("Source language is English or unrecognized, returning original text.")
103
  return {"translated_text": text}
104
 
105
  # Dapatkan translator yang sesuai dari kamus translators
106
  translator = translators.get(source_lang)
107
 
108
+ # Jika tidak ada translator yang mendukung bahasa yang terdeteksi/di-override
109
  if not translator:
110
  logger.error(f"No translator found for language: '{source_lang}'.")
111
  raise HTTPException(
 
114
  )
115
 
116
  # Lakukan terjemahan
117
+ logger.info(f"Translating text from '{source_lang}' to English...")
118
  result = translator(text)
119
  translated_text = result[0]["translation_text"]
120
  logger.info(f"Translation successful. Original: '{text[:50]}...', Translated: '{translated_text[:50]}...'")