Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -3,6 +3,7 @@ from dotenv import load_dotenv
|
|
3 |
from fastapi import FastAPI
|
4 |
from fastapi.middleware.cors import CORSMiddleware
|
5 |
from pydantic import BaseModel
|
|
|
6 |
import os
|
7 |
|
8 |
|
@@ -14,13 +15,10 @@ os.environ["HF_TOKEN"] = os.getenv('HF_TOKEN')
|
|
14 |
os.environ["HF_HOME"] = "/code/.cache/huggingface"
|
15 |
|
16 |
|
17 |
-
|
18 |
app = FastAPI()
|
19 |
|
20 |
|
21 |
origins = ["*"]
|
22 |
-
|
23 |
-
|
24 |
app.add_middleware(
|
25 |
CORSMiddleware,
|
26 |
allow_origins=origins,
|
@@ -30,32 +28,119 @@ app.add_middleware(
|
|
30 |
)
|
31 |
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
class LanguageTextModel(BaseModel):
|
34 |
languageText: str
|
35 |
sourceLanguageCode: str
|
36 |
targetLanguageCode: str
|
37 |
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
@app.get('/')
|
40 |
def welcome():
|
41 |
return {
|
42 |
'success': True,
|
43 |
-
'message': '
|
44 |
}
|
45 |
|
46 |
|
47 |
@app.post('/translate')
|
48 |
-
async def translate_text(
|
49 |
-
|
50 |
-
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M")
|
51 |
|
52 |
-
|
53 |
|
54 |
-
|
55 |
|
56 |
-
response = translator('I am not feeling well')
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
from fastapi import FastAPI
|
4 |
from fastapi.middleware.cors import CORSMiddleware
|
5 |
from pydantic import BaseModel
|
6 |
+
import langid
|
7 |
import os
|
8 |
|
9 |
|
|
|
15 |
os.environ["HF_HOME"] = "/code/.cache/huggingface"
|
16 |
|
17 |
|
|
|
18 |
app = FastAPI()
|
19 |
|
20 |
|
21 |
origins = ["*"]
|
|
|
|
|
22 |
app.add_middleware(
|
23 |
CORSMiddleware,
|
24 |
allow_origins=origins,
|
|
|
28 |
)
|
29 |
|
30 |
|
31 |
+
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M")
|
32 |
+
|
33 |
+
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
|
34 |
+
|
35 |
+
translator = pipeline('translation', model=model, tokenizer=tokenizer, max_length=400)
|
36 |
+
|
37 |
+
|
38 |
class LanguageTextModel(BaseModel):
|
39 |
languageText: str
|
40 |
sourceLanguageCode: str
|
41 |
targetLanguageCode: str
|
42 |
|
43 |
|
44 |
+
language_code_mapping = {
|
45 |
+
'en': 'eng_Latn',
|
46 |
+
'hi': 'hin_Deva',
|
47 |
+
'bn': 'ben_Beng',
|
48 |
+
'bho': 'bho_Deva',
|
49 |
+
'ur': 'urd_Arab',
|
50 |
+
'ta': 'tam_Taml',
|
51 |
+
'te': 'tel_Telu',
|
52 |
+
'ml': 'mal_Mlym',
|
53 |
+
'es': 'spa_Latn',
|
54 |
+
'fr': 'fra_Latn',
|
55 |
+
'de': 'deu_Latn',
|
56 |
+
'zh-cn': 'zho_Hans',
|
57 |
+
'ru': 'rus_Cyrl',
|
58 |
+
'pt': 'por_Latn',
|
59 |
+
'ja': 'jpn_Jpan',
|
60 |
+
'ko': 'kor_Hang',
|
61 |
+
'it': 'ita_Latn',
|
62 |
+
'nl': 'nld_Latn',
|
63 |
+
'el': 'ell_Grek',
|
64 |
+
'pl': 'pol_Latn',
|
65 |
+
'tr': 'tur_Latn',
|
66 |
+
'sv': 'swe_Latn',
|
67 |
+
'da': 'dan_Latn',
|
68 |
+
'fi': 'fin_Latn',
|
69 |
+
'hu': 'hun_Latn',
|
70 |
+
'cs': 'ces_Latn',
|
71 |
+
'no': 'nob_Latn',
|
72 |
+
'ro': 'ron_Latn',
|
73 |
+
'sk': 'slk_Latn',
|
74 |
+
'hr': 'hrv_Latn',
|
75 |
+
'bg': 'bul_Cyrl',
|
76 |
+
'uk': 'ukr_Cyrl',
|
77 |
+
'sr': 'srp_Cyrl',
|
78 |
+
'he': 'heb_Hebr',
|
79 |
+
'ar': 'arb_Arab',
|
80 |
+
'th': 'tha_Thai',
|
81 |
+
'vi': 'vie_Latn',
|
82 |
+
'id': 'ind_Latn',
|
83 |
+
'ms': 'zsm_Latn',
|
84 |
+
'tl': 'tgl_Latn',
|
85 |
+
'sw': 'swh_Latn',
|
86 |
+
'am': 'amh_Ethi',
|
87 |
+
'so': 'som_Latn',
|
88 |
+
'ha': 'hau_Latn',
|
89 |
+
'yo': 'yor_Latn',
|
90 |
+
'zu': 'zul_Latn',
|
91 |
+
'xh': 'xho_Latn',
|
92 |
+
'ig': 'ibo_Latn',
|
93 |
+
'uz': 'uzb_Latn',
|
94 |
+
'kk': 'kaz_Cyrl',
|
95 |
+
}
|
96 |
+
|
97 |
+
|
98 |
@app.get('/')
|
99 |
def welcome():
|
100 |
return {
|
101 |
'success': True,
|
102 |
+
'message': 'Server of "NLLB language translator" is up and running successfully'
|
103 |
}
|
104 |
|
105 |
|
106 |
@app.post('/translate')
|
107 |
+
async def translate_text(allInput: LanguageTextModel):
|
|
|
|
|
108 |
|
109 |
+
try:
|
110 |
|
111 |
+
detected_language, confidence = langid.classify(allInput.languageText)
|
112 |
|
|
|
113 |
|
114 |
+
if detected_language not in language_code_mapping:
|
115 |
+
|
116 |
+
return {
|
117 |
+
"success": False,
|
118 |
+
"message": "Detected Language is not supported."
|
119 |
+
}
|
120 |
+
|
121 |
+
|
122 |
+
detected_source_language_code = language_code_mapping[detected_language]
|
123 |
+
|
124 |
+
if detected_source_language_code != allInput.sourceLanguageCode:
|
125 |
+
|
126 |
+
return {
|
127 |
+
"success": False,
|
128 |
+
"message": "Wrong combination of source language code and input text."
|
129 |
+
}
|
130 |
+
|
131 |
+
|
132 |
+
response = translator(allInput.languageText, src_lang=allInput.sourceLanguageCode, tgt_lang=allInput.targetLanguageCode)
|
133 |
+
|
134 |
+
return {
|
135 |
+
"success": True,
|
136 |
+
"translated_text": response[0]['translation_text']
|
137 |
+
}
|
138 |
+
|
139 |
+
except Exception as e:
|
140 |
+
|
141 |
+
print(f"Error: {e}")
|
142 |
+
|
143 |
+
return {
|
144 |
+
"success": False,
|
145 |
+
"message": "Something went wrong. Please try again after sometime."
|
146 |
+
}
|