import os os.environ['CUDA_VISIBLE_DEVICES'] = '' os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true' import malaya import ctranslate2 import requests from transformers import AutoTokenizer import gradio as gr import logging import os HF_TOKEN = os.getenv('HF_TOKEN') hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, 'mesolitica/crowdsourced-malaysian-translation-v2') logging.basicConfig(level=logging.INFO) TO_LANG = { 'Malay': 'ms', 'English': 'en', } TO_LANG_KEYS = list(TO_LANG.keys()) MODELS = [ 'mesolitica/translation-t5-small-standard-bahasa-cased-v2', 'mesolitica/base', 'mesolitica/small', ] TO_MODEL = { 'mesolitica/base': 'base', 'mesolitica/small': 'small', } model = None map_lang = { 'en': 'Inggeris', 'jav': 'Jawa', 'bjn': 'Banjarese', 'ms': 'Melayu', 'ind': 'Indonesia', 'pasar ms': 'pasar Melayu', 'manglish': 'Manglish', } converter = ctranslate2.converters.TransformersConverter( 'mesolitica/translation-t5-small-standard-bahasa-cased-v2') try: converter.convert('t5-small-ct2', quantization='int8') except BaseException: pass tokenizer = AutoTokenizer.from_pretrained( 'mesolitica/translation-t5-small-standard-bahasa-cased-v2', use_fast=False, ) def translate(text, model_name, to_lang): if len(text) < 2: raise gr.Error('text input must longer than 1 character') if to_lang is None or len(to_lang) < 1: raise gr.Error('Please select target language') if model_name == 'mesolitica/translation-t5-small-standard-bahasa-cased-v2': global model to_lang = TO_LANG[to_lang] if model is None: translator = ctranslate2.Translator('t5-small-ct2') prefix = f'terjemah ke {map_lang[to_lang]}: {text}' input_tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(prefix)) outputs = translator.translate_batch( [input_tokens], max_input_length=4096, max_decoding_length=4096, disable_unk=True, ) results = [] for o in outputs: o = o.hypotheses[0] o = tokenizer.convert_tokens_to_ids(o) results.append(o) results = tokenizer.batch_decode( [[i for i in o if i not in [0, 1, 2]] for o in results], spaces_between_special_tokens=False, ) return results[0] else: json_data = { 'input': text, 'to_lang': TO_LANG[to_lang], 'model': TO_MODEL[model_name], } response = requests.post( 'https://llm-router.nous.mesolitica.com/translation/public', json=json_data, ) if response.status_code != 200: raise gr.Error('API error.') t = response.json()['result'] return t hansard = """ \n26 DR.27.10.2021 \n\n \nUSUL MENANGGUHKAN MESYUARAT \n\nDI BAWAH P.M. 18(1) \n \n\nPENJUALAN ASET GAS PETRONAS DI AZERBAIJAN \n\n \n\n11.33 pg. \n\nDato’ Seri Anwar bin Ibrahim [Port Dickson]: Tuan Yang di-Pertua, saya \nmohon mengemukakan usul di bawah Peraturan Mesyuarat 18(1) dan 18(2) Peraturan-\nperaturan Majlis Mesyuarat Dewan Rakyat seperti berikut: \n\n“Bahawa Dewan yang bersidang pada hari ini merundingkan \nlaporan bahawa Petronas telah menjual aset gas di Azerbaijan dengan \nharga hampir RM10 bilion berikutan desakan kerajaan menaikkan \nbayaran dividen Petronas sebanyak RM25 bilion kepada kerajaan bagi \ntahun 2021.” \n\n \nPerkara ini adalah perkara tertentu kerana penjualan aset gas di Azerbaijan \n\nbernilai RM10 bilion dan juga pembayaran dividen kepada kerajaan sebanyak RM25 bilion \nbagi tahun 2021 adalah berbahaya dan menjejaskan masa depan Petronas. Terkait \ndengan― sedikit penjelasan. Kerana tindakan seperti ini telah menyebabkan J.P. Morgan \nmengeluarkan Petronas dari ESG Emerging Market Bond Index dan ESG Asia Credit \nIndex. \n\nOleh itu, perkara itu perlu disegerakan kerana Petronas mengalami defisit \nberikutan pembayaran dividen berlebihan sejak tahun 2018 sehingga kini yang memaksa \nPetronas menjual aset atau meminjam lebih banyak dana luar negara bagi menampung \naliran tunai. \n\nIni diperkukuh dengan kenyataan Tengku Muhammad Taufik, CEO Petronas, “If \nthere is a policy shift but it comes too suddenly or too slowly, not only Petronas but the \nentire Malaysian economy could be put at risk, with regards to our energy mix.” \n\nIni perkara berkenaan dengan kepentingan orang ramai, malah seluruh ekonomi \nnegara, kerana Petronas adalah institusi penting ekonomi negara dan sewajarnya \ndiperkukuh kekuatannya dan tidak dilemahkan penarafan syarikat. Kemampuan untuk \nmelabur bagi menjana keuntungan masa depan yang mampu untuk membayar dividen \nyang munasabah kepada kerajaan demi kepentingan rakyat. Dengan tambahan RM7 \nbilion tahun ini, hasil Petronas akan berjumlah RM44.8 bilion atau 18 peratus daripada \npendapatan kerajaan bagi tahun 2021 daripada RM37.8 bilion sebelumnya. \n\nJadi, mohon persetujuan Tuan Yang di-Pertua untuk dibahaskan. [Tepuk] \n\nTuan Yang di-Pertua: Terima kasih Yang Berhormat. Sebenarnya Yang \nBerhormat perlu melengkapkan teks Yang Berhormat dan cuma dibaca teks tersebut \nmengikut peraturan. Akan tetapi, tak apa. \n\nAhli-ahli Yang Berhormat, saya telah menerima satu pemberitahu usul di bawah \nPeraturan Mesyuarat 18(1) oleh Yang Berhormat Port Dickson, Ketua Pembangkang pada \nhari Isnin, 25 Oktober 2021. Teks usul itu adalah seperti yang dibacakan tadi dengan \nsedikit tambahan oleh Ahli Yang Berhormat Port Dickson sebentar tadi. \n\nBagi membolehkan perkara ini ditimbangkan oleh Majlis Mesyuarat, saya \nhendaklah berpuas hati bahawa perkara yang dibangkitkan oleh Yang Berhormat itu \nmematuhi tiga syarat seperti mana biasalah iaitu: \n\n(i) perkara tertentu; \n\n(ii) bagi kepentingan orang ramai; dan \n\n(iii) berkehendak disegerakan. \n\n\n """.strip() code = """ Untuk menggunakan numpy, pertama, Anda perlu menginstalnya melalui pip. Anda dapat melakukannya dengan menjalankan perintah `pip install numpy` di terminal Anda. Setelah numpy terinstal, Anda dapat mengimpor modul numpy dengan menambahkan baris `import numpy as np` di awal program Anda. Berikut adalah contoh beberapa operasi dasar numpy: ``` python import numpy as np # membuat array numpy dari list my_list = [1, 2, 3, 4, 5] my_array = np.array(my_list) # membuat array numpy dengan rentang nilai tertentu my_range = np.arange(0, 10, 2) # nilai awal, nilai akhir, dan loncatan # membuat array numpy dengan nilai acak my_random_array = np.random.rand(3, 3) # 3 baris dan 3 kolom # mengakses elemen array numpy print(my_array[0]) # mengakses elemen pertama # melakukan operasi matematika pada array numpy my_array = my_array + 1 # menambah setiap elemen dengan 1 my_array = my_array * 2 # mengalikan setiap elemen dengan 2 # mengubah bentuk array numpy my_array = np.reshape(my_array, (2, 5)) # menjadi array 2D dengan 2 baris dan 5 kolom ``` Itulah beberapa operasi dasar numpy. Anda dapat menemukan dokumentasi resmi numpy di https://numpy.org/doc/stable/. """.strip() jawi = """ ترداڤت ببراڤ لڠكه يڠ بوليه اندا ايكوتي اونتوق مموهون جاوتن جوروترا ڤرايسين دالم تيكنولوڬي بلاكڠ د مايبڠك. اين اداله ڤندوان عموم دان موڠكين بربيذا برداسركن جاوتن توڤيق دان كڤرلوان خصوص مايبڠك. ١. سيمق لامن ويب مايبڠك اتاو تاڤق كرجا مريك اونتوق ڤلواڠ كرجا تركيني. مريك سريڠ منربيتكن جاوتن جاوتن تربوك د تاڤق كرجا مريك، سڤرتي لينكايدين، چرياير، اتاو ڬوڬل چارين كراجأن. ٢. بينچڠكن كڤرلوان باڬي ستياڤ جاوتن جاوتن، سڤرتي تاهڤ ڤنديديقن، ڤڠالمن ڤروفيسيونل يڠ دڤرلوكن دان كماهيرن يڠ دجڠككن. ٣. سسوايكن ريسوم اندا دڠن كڤرلوان ڤكرجأن دان سبارن ترڤرينچي تنتڠ ڤڠالمن دان كلاياكن اندا. سنتياس برهوبوڠ دڠن سموا بوتيرن، سڤرتي تيمڤوه ڤكرجأن، تڠڬوڠجواب دان ڤروجييك خصوص. ٤. هورايكن سبارڠ كماهيرن اتاو ڤڠتاهوان يڠ بركاءيتن يڠ موڠكين دميليكي اوليه مايبڠك، سڤرتي ڤمباڠونن ڤرموسيماسن، ڤمبلاجرن ميسين اتاو اڤليكسي كسلامتن. ٥. بريكن ڤتيكن سورت دالمن يڠ كوات، كمودين سرلهكن سبارڠ ڤروجيك سوكاريلا اتاو ماس لاڤڠ يڠ مليبتكن كرجا يڠ دچدق دان بوليه دسسوايكن دڠن ڤرانن. ٦. سهكن نام كات لالوان يڠ ڤوڤولر اونتوق مان-مان اكاءون ميديا سوسيال يڠ دڤرلوكن اونتوق منيڠكتكن كبوليهليهتن دان ڤمريقسأن باڬي ڤروڬرام ڤنيلاين ڤاكر جاوتن. ٧. ڬوناكن قاعده سيستم ڤڠوروسن باكت ﴿اتمس﴾ دڠن بيبس، سلاين درڤد ڤندفترن بياسا، دان سدياكن سالينن اصل مان-مان كماهيرن اتاو كلاياكن يڠ اندا ڤڠڽيمڤنن سچارا ديڬيتل اونتوق سبارڠ سؤالن تمبهن. ٨. سبلوم مڽراهكن سبارڠ دوكومنتاسي دالم تالين، بينچڠكن سچارا مڽلوروه سموا ڤروجيك سوكاريلا دان سوكاريلا سبلوم اين، جاوتن توڬس سام اد سباهاڬين درڤد ڤروجيك اتاو دجالنكن سنديري، تڠڬوڠجواب، تاريخ اخير، ماس كسلوروهن دان ڤرجنجين اوڤراسي. ٩. اونتوق ڤڠالمن كومڤولن، بينچڠكن سچارا مڽلوروه سبارڠ ڤروجيك كومڤولن سبلوم اين يڠ ممرلوكن كومونيكاسي يڠ جلس، تيدق بوليه دباليقكن دان اڤليكسي كواليتي اتاو كروميتان سيستم. ١٠. سبلوم مڽرهكن دوكومنتاسي دالم تالين، بينچڠكن سچارا مڽلوروه سموا ڤروجيك سوكاريلا دان سوكاريلا سبلوم اين، جاوتن توڬس سام اد سباهاڬين درڤد ڤروجيك اتاو دجالنكن سنديري، تڠڬوڠجواب، تاريخ اخير، ماس كسلوروهن دان ڤرجنجين اوڤراسي. ١١. سڤيسيفيكاسي سبارڠ كماهيرن دان كلاياكن يڠ بركاءيتن يڠ موڠكين دميليكي اوليه مايبڠك، سڤرتي ڤمباڠونن ڤرموسيماسن، ڤمبلاجرن ميسين اتاو اڤليكسي كسلامتن. ١٢. جاديكن ڤتيكن سورت دالمن يڠ كوات، كمودين سرلهكن سبارڠ ڤروجيك سوكاريلا اتاو ماس لاڤڠ يڠ مليبتكن كرجا يڠ دچدق دان بوليه دسسوايكن دڠن ڤرانن. ١٣. سهكن نام كات لالوان يڠ ڤوڤولر اونتوق مان-مان اكاءون ميديا سوسيال يڠ دڤرلوكن اونتوق منيڠكتكن كبوليهليهتن دان ڤمريقسأن باڬي ڤروڬرام ڤنيلاين ڤاكر جاوتن. ١٤. ڬوناكن قاعده سيستم ڤڠوروسن باكت ﴿اتمس﴾ دڠن بيبس، سلاين درڤد ڤندفترن بياسا، دان سدياكن سالينن اصل مان-مان كماهيرن اتاو كلاياكن يڠ اندا ڤڠڽيمڤنن سچارا ديڬيتل اونتوق سبارڠ سؤالن تمبهن. ١٥. سبلوم مڽرهكن سبارڠ دوكومنتاسي دالم تالين، بينچڠكن سچارا مڽلوروه سموا ڤروجيك سوكاريلا دان سوكاريلا سبلوم اين، جاوتن توڬس سام اد سباهاڬين درڤد ڤروجيك اتاو دجالنكن سنديري، تڠڬوڠجواب، تاريخ اخير، ماس كسلوروهن دان ڤرجنجين اوڤراسي. نوتا: اندا مستي مڠسهكن سمولا دڠن ستياڤ تاڤق كرجا ترتنتو اونتوق منداڤتكن جاوتن تڤت دان سبارڠ كڤرلوان تمبهن يڠ مريك تله تتڤكن. ڤتيكن سورت دالمن يڠ كوات اداله كريتيكال كران اي منونجوقكن بهاوا اندا ممڤوڽاءي كماهيرن يڠ بتول اونتوق بكرجا دالم ڤرانن ترسبوت دان بوليه ممبنتو اندا منداڤتكن جاوتن توڬسن. سلاين ايت، منونجوقكن ڤروجيك سوكاريلا دان ماس لاڤڠ يڠ مليبتكن كرجا يڠ دچدق بوليه ممبنتو منجاديكن اندا دڤيليه اونتوق جاوتن اين، كران اي منونجوقكن كماهيرن اندا دالم ڤرسكيترن يڠ منچابر دان كاوڤايان اونتوق مڠمبيل تڠڬوڠجواب يڠ كريتيكال. """.strip() mandarin = """ 您是否对Maybank Backend Engineer职位感兴趣?以下是您可以遵循的一般流程: 1. 查看职位描述:检查Maybank提供的官方职位空缺以查看所需资格和要求。 2. 更新您的简历:确保您的简历与职位描述和公司网站的信息保持一致。突出您的相关工作经验、技能和教育。 3. 准备您的 Cover Letter:在申请信中解释您如何适合这个职位并如何为Maybank做出贡献。包括您的个人价值观、技术技能和经验。 4. 提交您的申请:您可以通过Maybank的官方网站提交您的申请或直接到他们的办公室提交。 5. 评估您的申请:您的申请将由Maybank的招聘团队进行审查和评估。这包括检查您的简历和 Cover Letter。 需要注意的是,由于竞争激烈,您可能需要在申请前加强技能和知识,例如学习新的编程语言或工具。 以下是一些在马来西亚申请工作时需要考虑的事项: 1. 工作经验:Maybank可能正在寻找具有工作经验的人。确保您的工作经验与所申请职位相关,并能够证明您适合这个职位。 2. 技术能力:Maybank可能正在寻找具有高级技术能力的人员,例如编码或开发工具使用。准备好展示您在技术方面的实力。 3. 领英专业组:在 LinkedIn 创建一个专业的个人资料并加入相关的专业组可以有助于您找到工作,并向潜在雇主展示您的专业知识。 4. 工作面试:如果您被选择参加面试,请准备好回答面试官可能会问到的常见问题。练习回答强调您在职位中的优势和经验的问题。 希望这可以帮助您! """.strip() tamil = """ ஒரு பேக்கெண்ட் பொறியியலாளராக Maybank இல் வேலை வாய்ப்புகளைப் பற்றி நீங்கள் எதிர்பார்க்கும் விவரக்குறிப்புகளின் அடிப்படையில், நீங்கள் செயல்படுத்த வேண்டிய பணிகளின் கருத்துடன் இதை சாத்தியமான பதிலை வழங்குவதற்கு சிறிது தெளிவு தேவை. வெப் மற்றும் ஸ்கியூவால் இயக்கப்படும் இன்ஃப்ளேஷபிலிட்டி-அடிப்படையிலான பல்வேறு தளங்கள் மற்றும் அமைப்புகளைக் கட்டமைப்பதில் நீங்கள் செயல்படுத்த வேண்டிய பணிகள் அடங்கும். இந்த அடிப்படையில், ஒரு பேக்கெண்ட் பொறியியலாளருக்கு அவர்களின் திறன்களை மேம்படுத்தவும், காலப்போக்கில் உள்ள பதவிகளுக்கான வாய்ப்புகளைப் பெறவும் பல வழிகள் உள்ளன: 1. ஆங்கிலத்தில் மேலும் அறிவையும் தொழில்முறை உள்ளடக்கத்தையும் பெறுங்கள்: பேக்கெண்ட் பொறியியல் என்பது அறிவுத் தொழில்நுட்பம் மற்றும் நிபுணத்துவத்தின் ஒரு முக்கிய அம்சமாகும். பேக்கெண்ட் பொறியியலைப் பற்றி அதிக அளவிலான அறிவை உருவாக்கி, சமீபத்திய முன்னேற்றங்களை தொடர்ந்து படித்து வருவது உங்கள் திறன்களை மேம்படுத்தவும், பல்வேறு பாதைகளில் உள்ள வாய்ப்புகளைப் பற்றி நீங்கள் தெரிந்து கொள்ளவும் உதவும். 2. நிபுணர் தனித்துவமான நடைமுறை மற்றும் தொழில்முறை: பேக்கெண்ட் பொறியியல் பொறுப்புகளில் பின்பற்றக்கூடிய மற்றும் நிபுணர் கேச்ச் குழுக்கள் மற்றும் நிறுவனங்களை தேடுங்கள். பேக்கெண்ட் பொறியியல் துறையில் நிபுணர்களைக் கண்டறிய டூயிட்டில் மற்றும் கோடிங் சம்பந்தப்பட்ட தொடரியல் தளங்கள் உட்பட பல தளங்கள் உள்ளன. 3. பேக்கெண்ட் திறமைகளை வளர்ப்பதற்கான பட்டங்கள் மற்றும் பட்டறைகளை மேற்கொள்ளுங்கள்: பேக்கெண்ட் பொறியியலில் உங்கள் திறன்களை மேம்படுத்துவதற்கு மேலும் ஆறுதலாக உதவும் ஆன்லைன் பட்டப்படிப்புகள், பட்டறைகள் மற்றும் மாநாடுகள் ஆகியவற்றை நீங்கள் கவனிக்க வேண்டும். 4. பங்கேற்க ஒரு சிறுநெளிவாக்கியாக இருங்கள்: உங்கள் படைப்பாற்றல் மற்றும் படைப்பாற்றலை வெளிப்படுத்தும் வகையில் ஒரு சிறுநெளிவாக்கியில் பணியாற்றுவதைக் கருத்தில் கொள்ளுங்கள். மாறுபட்ட அனுபவங்களுக்கு அவை நல்ல தளமாகும். 5. உங்கள் திறன்கள் மற்றும் பலத்தை மேம்படுத்த ஒரு வேலைத் திட்டத்தை உருவாக்கவும்: உங்கள் பேக்கெண்ட் பொறியியல் திறன்கள், விமர்சனக் கருத்தரங்குகள், வெளிப்பாடு மற்றும் மதிப்பீடுகளின் விளக்கங்கள் உட்பட, விரிவான பணிப்பட்டியல் அல்லது வேலை விளக்கத்தை உருவாக்குங்கள். உங்கள் விரிவான புதிய திறன்களை வெளிப்படுத்த உதவும் ஏதேனும் குறிப்பிட்ட திறன்களைப் பற்றி மேலும் குறிப்பிட முயற்சிக்கவும். 6. ஒரு வேட்பாளர்களை தயாரிப்பதில் கவனம் செலுத்துங்கள்: உங்கள் பேக்கெண்ட் பொறியியல் திறன்களை வெளிப்படுத்தும் சாதனைகளை உருவாக்குங்கள், மேலும் உங்கள் வேட்பாளர் வேட்பாளர்களிடம் முக்கியமாகக் கூறவும் காட்டவும். வாழ்க்கைப் பற்றிய உங்கள் கண்ணோட்டம் மற்றும் உங்கள் நேர்மறை உத்திகள் பற்றிய தெளிவான புரிதலை வழங்குங்கள். 7. பேக்கெண்ட் பொறியியலில் நிபுணர்: உங்கள் படைப்பாற்றல் மற்றும் நிபுணர் அறிவு ஆகியவற்றை மேம்படுத்தும் வகையில், பேக்கெண்ட் பொறியியலில் நிபுணராகத் திறந்த தீர்ப்பாளர்கள் அல்லது சமூகத்தில் பங்கேற்க நீங்கள் பரிசீலிக்கலாம். இது உங்கள் திறன்களை வெளிப்படுத்துவதற்கான சரியான நேரம் மற்றும் வாய்ப்பைப் பெறுவதற்கான வாய்ப்புகளை வழங்கலாம். நான் வழங்கிய வழிமுறைகள் போதுமானதாக இல்லாவிட்டால் அல்லது உங்களுக்கு குறிப்பிட்ட கேள்விகள் இருந்தால், அவற்றைப் பின்தொடர்வதன் மூலம் உங்களுக்கு கூடுதல் கவனம் மற்றும் குறிப்பிட்ட உதவிகளை வழங்குவேன். மேலும் தகவல்கள் அல்லது வழிகாட்டுதல்களை வழங்குவதில் எனக்கு மகிழ்ச்சி அடைகிறது. இந்த உதவிக்கு நன்றி, மேலும் விருந்தினர்களைக் கொண்டிருப்பதற்கான வாய்ப்புகள் கு """.strip() description = """ mesolitica/translation-t5-small-standard-bahasa-cased-v2 able to translate malay, pasar malay (social media texts or local context), english, manglish, javanese, banjarese and indonesian to target language. It also able to maintain the text structure as it is and only translate necessary texts, eg, programming code. mesolitica/base and mesolitica/small are our paid Translation models with Normalization to translate local Malay, Jawi, Banjarese, Javanese, Indonesian, local Mandarin, Simple Mandarin, Tamil, Punjabi, Malayalam, Manglish, Standard English, Sabahan, Perak, Pahang, Negeri Sembilan, Melaka, Kedahan and Johor to Standard Malay and Standard English, limit 100k tokens per minute globally. If you prefer API based, you can check the documentation at https://llm-router.nous.mesolitica.com/scalar#tag/translation/POST/translation/public If you found out the translation is wrong, by simply fix the second box output and click `Flag as Wrong` button. You can help us to improve the future model, the dataset will be open source at mesolitica/crowdsourced-malaysian-translation-v2 """.strip() demo = gr.Interface( fn=translate, inputs=[ gr.components.Textbox(label='Input Text', max_lines = 30), gr.components.Dropdown(label='Model', choices=MODELS, value='mesolitica/base'), gr.components.Dropdown(label='Output language', choices=TO_LANG_KEYS, value='Malay'), ], outputs=[ gr.components.Textbox(label='Does it correct? fix me!', interactive = True, max_lines = 30), ], examples=[ ['Syed Saddiq berkata, mereka seharusnya mengingati bahawa semasa menjadi Perdana Menteri Pakatan Harapan', 'mesolitica/base', 'English'], ['SHAH ALAM - Pertubuhan Kebajikan Anak Bersatu Selangor bersetuju pihak kerajaan mewujudkan Suruhanjaya Siasatan Diraja untuk menyiasat isu kartel daging.', 'mesolitica/base', 'English'], ['Smh the dude literally has a rubbish bin infront of his house', 'mesolitica/base', 'English'], ["I think I won't be able to catch it within 1 min lol", 'mesolitica/base', 'Malay'], ["Memanglah. Ini tak payah expert, aku pun tau. It's a gesture", 'mesolitica/base', 'Malay'], ["hg nk p mna tu", 'mesolitica/base', 'English'], ["hg ckp elok sikit, ckp mcm musuh islam", 'mesolitica/base', 'Malay'], ['Kita ora duwe wektu kanggo gelut utawa sengit.', 'mesolitica/base', 'Malay'], [jawi, 'mesolitica/base', 'Malay'], [mandarin, 'mesolitica/base', 'Malay'], [tamil, 'mesolitica/base', 'Malay'], [hansard, 'mesolitica/base', 'English'], [code, 'mesolitica/base', 'Malay'], ], allow_flagging='manual', flagging_options=['Wrong'], flagging_callback=hf_writer, cache_examples=False, title='Malaysian NMT', description=description, ) demo.launch(server_name='0.0.0.0')