som11 commited on
Commit
325ef5c
·
verified ·
1 Parent(s): dd5358b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -14
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': 'server of "nllb language translator" is up and running successfully '
44
  }
45
 
46
 
47
  @app.post('/translate')
48
- async def translate_text(input: LanguageTextModel):
49
-
50
- model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M")
51
 
52
- tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
53
 
54
- translator = pipeline('translation', model=model, tokenizer=tokenizer, src_lang=input.sourceLanguageCode, tgt_lang=input.targetLanguageCode, max_length=400)
55
 
56
- response = translator('I am not feeling well')
57
 
58
- return {
59
- "success": True,
60
- "translated_text": response[0]['translation_text']
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
+ }