Spaces:
Running
Running
Added a web UI page for Translation to test the translation capabilities of the model.
Browse files- app.py +172 -51
- config.json5 +6 -0
- docs/translateModel.md +1 -0
app.py
CHANGED
|
@@ -42,6 +42,7 @@ from src.translation.translationLangs import (TranslationLang,
|
|
| 42 |
_TO_LANG_CODE_WHISPER, sort_lang_by_whisper_codes,
|
| 43 |
get_lang_from_whisper_name, get_lang_from_whisper_code, get_lang_from_nllb_name, get_lang_from_m2m100_name, get_lang_from_seamlessTx_name,
|
| 44 |
get_lang_whisper_names, get_lang_nllb_names, get_lang_m2m100_names, get_lang_seamlessTx_names)
|
|
|
|
| 45 |
import shutil
|
| 46 |
import zhconv
|
| 47 |
import tqdm
|
|
@@ -214,26 +215,6 @@ class WhisperTranscriber:
|
|
| 214 |
whisperModelName: str = decodeOptions.pop("whisperModelName")
|
| 215 |
whisperLangName: str = decodeOptions.pop("whisperLangName")
|
| 216 |
|
| 217 |
-
translateInput: str = decodeOptions.pop("translateInput")
|
| 218 |
-
m2m100ModelName: str = decodeOptions.pop("m2m100ModelName")
|
| 219 |
-
m2m100LangName: str = decodeOptions.pop("m2m100LangName")
|
| 220 |
-
nllbModelName: str = decodeOptions.pop("nllbModelName")
|
| 221 |
-
nllbLangName: str = decodeOptions.pop("nllbLangName")
|
| 222 |
-
mt5ModelName: str = decodeOptions.pop("mt5ModelName")
|
| 223 |
-
mt5LangName: str = decodeOptions.pop("mt5LangName")
|
| 224 |
-
ALMAModelName: str = decodeOptions.pop("ALMAModelName")
|
| 225 |
-
ALMALangName: str = decodeOptions.pop("ALMALangName")
|
| 226 |
-
madlad400ModelName: str = decodeOptions.pop("madlad400ModelName")
|
| 227 |
-
madlad400LangName: str = decodeOptions.pop("madlad400LangName")
|
| 228 |
-
seamlessModelName: str = decodeOptions.pop("seamlessModelName")
|
| 229 |
-
seamlessLangName: str = decodeOptions.pop("seamlessLangName")
|
| 230 |
-
|
| 231 |
-
translationBatchSize: int = decodeOptions.pop("translationBatchSize")
|
| 232 |
-
translationNoRepeatNgramSize: int = decodeOptions.pop("translationNoRepeatNgramSize")
|
| 233 |
-
translationNumBeams: int = decodeOptions.pop("translationNumBeams")
|
| 234 |
-
translationTorchDtypeFloat16: bool = decodeOptions.pop("translationTorchDtypeFloat16")
|
| 235 |
-
translationUsingBitsandbytes: str = decodeOptions.pop("translationUsingBitsandbytes")
|
| 236 |
-
|
| 237 |
sourceInput: str = decodeOptions.pop("sourceInput")
|
| 238 |
urlData: str = decodeOptions.pop("urlData")
|
| 239 |
multipleFiles: List = decodeOptions.pop("multipleFiles")
|
|
@@ -346,36 +327,7 @@ class WhisperTranscriber:
|
|
| 346 |
cache=self.model_cache, models=self.app_config.models["whisper"])
|
| 347 |
|
| 348 |
progress(0, desc="init translate model")
|
| 349 |
-
translationLang =
|
| 350 |
-
translationModel = None
|
| 351 |
-
if translateInput == "m2m100" and m2m100LangName is not None and len(m2m100LangName) > 0:
|
| 352 |
-
selectedModelName = m2m100ModelName if m2m100ModelName is not None and len(m2m100ModelName) > 0 else "m2m100_418M/facebook"
|
| 353 |
-
selectedModel = next((modelConfig for modelConfig in self.app_config.models["m2m100"] if modelConfig.name == selectedModelName), None)
|
| 354 |
-
translationLang = get_lang_from_m2m100_name(m2m100LangName)
|
| 355 |
-
elif translateInput == "nllb" and nllbLangName is not None and len(nllbLangName) > 0:
|
| 356 |
-
selectedModelName = nllbModelName if nllbModelName is not None and len(nllbModelName) > 0 else "nllb-200-distilled-600M/facebook"
|
| 357 |
-
selectedModel = next((modelConfig for modelConfig in self.app_config.models["nllb"] if modelConfig.name == selectedModelName), None)
|
| 358 |
-
translationLang = get_lang_from_nllb_name(nllbLangName)
|
| 359 |
-
elif translateInput == "mt5" and mt5LangName is not None and len(mt5LangName) > 0:
|
| 360 |
-
selectedModelName = mt5ModelName if mt5ModelName is not None and len(mt5ModelName) > 0 else "mt5-zh-ja-en-trimmed/K024"
|
| 361 |
-
selectedModel = next((modelConfig for modelConfig in self.app_config.models["mt5"] if modelConfig.name == selectedModelName), None)
|
| 362 |
-
translationLang = get_lang_from_m2m100_name(mt5LangName)
|
| 363 |
-
elif translateInput == "ALMA" and ALMALangName is not None and len(ALMALangName) > 0:
|
| 364 |
-
selectedModelName = ALMAModelName if ALMAModelName is not None and len(ALMAModelName) > 0 else "ALMA-7B-ct2:int8_float16/avan"
|
| 365 |
-
selectedModel = next((modelConfig for modelConfig in self.app_config.models["ALMA"] if modelConfig.name == selectedModelName), None)
|
| 366 |
-
translationLang = get_lang_from_m2m100_name(ALMALangName)
|
| 367 |
-
elif translateInput == "madlad400" and madlad400LangName is not None and len(madlad400LangName) > 0:
|
| 368 |
-
selectedModelName = madlad400ModelName if madlad400ModelName is not None and len(madlad400ModelName) > 0 else "madlad400-3b-mt-ct2-int8_float16/SoybeanMilk"
|
| 369 |
-
selectedModel = next((modelConfig for modelConfig in self.app_config.models["madlad400"] if modelConfig.name == selectedModelName), None)
|
| 370 |
-
translationLang = get_lang_from_m2m100_name(madlad400LangName)
|
| 371 |
-
elif translateInput == "seamless" and seamlessLangName is not None and len(seamlessLangName) > 0:
|
| 372 |
-
selectedModelName = seamlessModelName if seamlessModelName is not None and len(seamlessModelName) > 0 else "seamless-m4t-v2-large/facebook"
|
| 373 |
-
selectedModel = next((modelConfig for modelConfig in self.app_config.models["seamless"] if modelConfig.name == selectedModelName), None)
|
| 374 |
-
translationLang = get_lang_from_seamlessTx_name(seamlessLangName)
|
| 375 |
-
|
| 376 |
-
|
| 377 |
-
if translationLang is not None:
|
| 378 |
-
translationModel = TranslationModel(modelConfig=selectedModel, whisperLang=whisperLang, translationLang=translationLang, batchSize=translationBatchSize, noRepeatNgramSize=translationNoRepeatNgramSize, numBeams=translationNumBeams, torchDtypeFloat16=translationTorchDtypeFloat16, usingBitsandbytes=translationUsingBitsandbytes)
|
| 379 |
|
| 380 |
progress(0, desc="init transcribe")
|
| 381 |
# Result
|
|
@@ -871,6 +823,123 @@ class WhisperTranscriber:
|
|
| 871 |
self.diarization.cleanup()
|
| 872 |
self.diarization = None
|
| 873 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 874 |
def create_ui(app_config: ApplicationConfig):
|
| 875 |
translateModelMd: str = None
|
| 876 |
optionsMd: str = None
|
|
@@ -1135,11 +1204,63 @@ def create_ui(app_config: ApplicationConfig):
|
|
| 1135 |
|
| 1136 |
return transcribe
|
| 1137 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1138 |
simpleTranscribe = create_transcribe(uiDescription, is_queue_mode)
|
| 1139 |
fullDescription = uiDescription + "\n\n\n\n" + "Be careful when changing some of the options in the full interface - this can cause the model to crash."
|
| 1140 |
fullTranscribe = create_transcribe(fullDescription, is_queue_mode, True)
|
|
|
|
| 1141 |
|
| 1142 |
-
demo = gr.TabbedInterface([simpleTranscribe, fullTranscribe], tab_names=["Simple", "Full"], css=css)
|
| 1143 |
|
| 1144 |
# Queue up the demo
|
| 1145 |
if is_queue_mode:
|
|
|
|
| 42 |
_TO_LANG_CODE_WHISPER, sort_lang_by_whisper_codes,
|
| 43 |
get_lang_from_whisper_name, get_lang_from_whisper_code, get_lang_from_nllb_name, get_lang_from_m2m100_name, get_lang_from_seamlessTx_name,
|
| 44 |
get_lang_whisper_names, get_lang_nllb_names, get_lang_m2m100_names, get_lang_seamlessTx_names)
|
| 45 |
+
import re
|
| 46 |
import shutil
|
| 47 |
import zhconv
|
| 48 |
import tqdm
|
|
|
|
| 215 |
whisperModelName: str = decodeOptions.pop("whisperModelName")
|
| 216 |
whisperLangName: str = decodeOptions.pop("whisperLangName")
|
| 217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 218 |
sourceInput: str = decodeOptions.pop("sourceInput")
|
| 219 |
urlData: str = decodeOptions.pop("urlData")
|
| 220 |
multipleFiles: List = decodeOptions.pop("multipleFiles")
|
|
|
|
| 327 |
cache=self.model_cache, models=self.app_config.models["whisper"])
|
| 328 |
|
| 329 |
progress(0, desc="init translate model")
|
| 330 |
+
translationLang, translationModel = self.initTranslationModel(whisperLangName, whisperLang, decodeOptions)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 331 |
|
| 332 |
progress(0, desc="init transcribe")
|
| 333 |
# Result
|
|
|
|
| 823 |
self.diarization.cleanup()
|
| 824 |
self.diarization = None
|
| 825 |
|
| 826 |
+
# Entry function for the simple or full tab, Queue mode disabled: progress bars will not be shown
|
| 827 |
+
def translation_entry(self, data: dict): return self.translation_entry_progress(data)
|
| 828 |
+
|
| 829 |
+
# Entry function for the simple or full tab with progress, Progress tracking requires queuing to be enabled
|
| 830 |
+
def translation_entry_progress(self, data: dict, progress=gr.Progress()):
|
| 831 |
+
dataDict = {}
|
| 832 |
+
for key, value in data.items():
|
| 833 |
+
dataDict.update({key.elem_id: value})
|
| 834 |
+
|
| 835 |
+
return self.translation_webui(dataDict, progress=progress)
|
| 836 |
+
|
| 837 |
+
def translation_webui(self, dataDict: dict, progress: gr.Progress = None):
|
| 838 |
+
try:
|
| 839 |
+
inputText: str = dataDict.pop("inputText")
|
| 840 |
+
inputLangName: str = dataDict.pop("inputLangName")
|
| 841 |
+
inputLang: TranslationLang = get_lang_from_whisper_name(inputLangName)
|
| 842 |
+
|
| 843 |
+
progress(0, desc="init translate model")
|
| 844 |
+
translationLang, translationModel = self.initTranslationModel(inputLangName, inputLang, dataDict)
|
| 845 |
+
|
| 846 |
+
result = []
|
| 847 |
+
if translationModel and translationModel.translationLang:
|
| 848 |
+
try:
|
| 849 |
+
inputTexts = inputText.split("\n")
|
| 850 |
+
|
| 851 |
+
progress(0, desc="Translation starting...")
|
| 852 |
+
|
| 853 |
+
perf_start_time = time.perf_counter()
|
| 854 |
+
translationModel.load_model()
|
| 855 |
+
for idx, text in enumerate(tqdm.tqdm(inputTexts)):
|
| 856 |
+
if not text or re.match("""^[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~\d ]+$""", text.strip()):
|
| 857 |
+
result.append(text)
|
| 858 |
+
else:
|
| 859 |
+
result.append(translationModel.translation(text))
|
| 860 |
+
progress((idx+1)/len(inputTexts), desc=f"Process inputText: {idx+1}/{len(inputTexts)}")
|
| 861 |
+
|
| 862 |
+
translationModel.release_vram()
|
| 863 |
+
perf_end_time = time.perf_counter()
|
| 864 |
+
# Call the finished callback
|
| 865 |
+
progress(1, desc=f"Process inputText: {idx+1}/{len(inputTexts)}")
|
| 866 |
+
|
| 867 |
+
print("\n\nprocess inputText took {} seconds.\n\n".format(perf_end_time - perf_start_time))
|
| 868 |
+
except Exception as e:
|
| 869 |
+
print(traceback.format_exc())
|
| 870 |
+
print("Error process inputText: " + str(e))
|
| 871 |
+
|
| 872 |
+
resultStr = "\n".join(result)
|
| 873 |
+
|
| 874 |
+
translationZho: bool = translationModel and translationModel.translationLang and translationModel.translationLang.nllb and translationModel.translationLang.nllb.code in ["zho_Hant", "zho_Hans", "yue_Hant"]
|
| 875 |
+
if translationZho:
|
| 876 |
+
if translationModel.translationLang.nllb.code == "zho_Hant":
|
| 877 |
+
locale = "zh-tw"
|
| 878 |
+
elif translationModel.translationLang.nllb.code == "zho_Hans":
|
| 879 |
+
locale = "zh-cn"
|
| 880 |
+
elif translationModel.translationLang.nllb.code == "yue_Hant":
|
| 881 |
+
locale = "zh-hk"
|
| 882 |
+
resultStr = zhconv.convert(resultStr, locale)
|
| 883 |
+
|
| 884 |
+
return resultStr
|
| 885 |
+
except Exception as e:
|
| 886 |
+
print(traceback.format_exc())
|
| 887 |
+
return "Error occurred during transcribe: " + str(e) + "\n\n" + traceback.format_exc()
|
| 888 |
+
|
| 889 |
+
def initTranslationModel(self, inputLangName: str, inputLang: TranslationLang, dataDict: dict):
|
| 890 |
+
translateInput: str = dataDict.pop("translateInput")
|
| 891 |
+
m2m100ModelName: str = dataDict.pop("m2m100ModelName")
|
| 892 |
+
m2m100LangName: str = dataDict.pop("m2m100LangName")
|
| 893 |
+
nllbModelName: str = dataDict.pop("nllbModelName")
|
| 894 |
+
nllbLangName: str = dataDict.pop("nllbLangName")
|
| 895 |
+
mt5ModelName: str = dataDict.pop("mt5ModelName")
|
| 896 |
+
mt5LangName: str = dataDict.pop("mt5LangName")
|
| 897 |
+
ALMAModelName: str = dataDict.pop("ALMAModelName")
|
| 898 |
+
ALMALangName: str = dataDict.pop("ALMALangName")
|
| 899 |
+
madlad400ModelName: str = dataDict.pop("madlad400ModelName")
|
| 900 |
+
madlad400LangName: str = dataDict.pop("madlad400LangName")
|
| 901 |
+
seamlessModelName: str = dataDict.pop("seamlessModelName")
|
| 902 |
+
seamlessLangName: str = dataDict.pop("seamlessLangName")
|
| 903 |
+
|
| 904 |
+
translationBatchSize: int = dataDict.pop("translationBatchSize")
|
| 905 |
+
translationNoRepeatNgramSize: int = dataDict.pop("translationNoRepeatNgramSize")
|
| 906 |
+
translationNumBeams: int = dataDict.pop("translationNumBeams")
|
| 907 |
+
translationTorchDtypeFloat16: bool = dataDict.pop("translationTorchDtypeFloat16")
|
| 908 |
+
translationUsingBitsandbytes: str = dataDict.pop("translationUsingBitsandbytes")
|
| 909 |
+
|
| 910 |
+
translationLang = None
|
| 911 |
+
translationModel = None
|
| 912 |
+
if translateInput == "m2m100" and m2m100LangName is not None and len(m2m100LangName) > 0:
|
| 913 |
+
selectedModelName = m2m100ModelName if m2m100ModelName is not None and len(m2m100ModelName) > 0 else "m2m100_418M/facebook"
|
| 914 |
+
selectedModel = next((modelConfig for modelConfig in self.app_config.models["m2m100"] if modelConfig.name == selectedModelName), None)
|
| 915 |
+
translationLang = get_lang_from_m2m100_name(m2m100LangName)
|
| 916 |
+
elif translateInput == "nllb" and nllbLangName is not None and len(nllbLangName) > 0:
|
| 917 |
+
selectedModelName = nllbModelName if nllbModelName is not None and len(nllbModelName) > 0 else "nllb-200-distilled-600M/facebook"
|
| 918 |
+
selectedModel = next((modelConfig for modelConfig in self.app_config.models["nllb"] if modelConfig.name == selectedModelName), None)
|
| 919 |
+
translationLang = get_lang_from_nllb_name(nllbLangName)
|
| 920 |
+
elif translateInput == "mt5" and mt5LangName is not None and len(mt5LangName) > 0:
|
| 921 |
+
selectedModelName = mt5ModelName if mt5ModelName is not None and len(mt5ModelName) > 0 else "mt5-zh-ja-en-trimmed/K024"
|
| 922 |
+
selectedModel = next((modelConfig for modelConfig in self.app_config.models["mt5"] if modelConfig.name == selectedModelName), None)
|
| 923 |
+
translationLang = get_lang_from_m2m100_name(mt5LangName)
|
| 924 |
+
elif translateInput == "ALMA" and ALMALangName is not None and len(ALMALangName) > 0:
|
| 925 |
+
selectedModelName = ALMAModelName if ALMAModelName is not None and len(ALMAModelName) > 0 else "ALMA-7B-ct2:int8_float16/avan"
|
| 926 |
+
selectedModel = next((modelConfig for modelConfig in self.app_config.models["ALMA"] if modelConfig.name == selectedModelName), None)
|
| 927 |
+
translationLang = get_lang_from_m2m100_name(ALMALangName)
|
| 928 |
+
elif translateInput == "madlad400" and madlad400LangName is not None and len(madlad400LangName) > 0:
|
| 929 |
+
selectedModelName = madlad400ModelName if madlad400ModelName is not None and len(madlad400ModelName) > 0 else "madlad400-3b-mt-ct2-int8_float16/SoybeanMilk"
|
| 930 |
+
selectedModel = next((modelConfig for modelConfig in self.app_config.models["madlad400"] if modelConfig.name == selectedModelName), None)
|
| 931 |
+
translationLang = get_lang_from_m2m100_name(madlad400LangName)
|
| 932 |
+
elif translateInput == "seamless" and seamlessLangName is not None and len(seamlessLangName) > 0:
|
| 933 |
+
selectedModelName = seamlessModelName if seamlessModelName is not None and len(seamlessModelName) > 0 else "seamless-m4t-v2-large/facebook"
|
| 934 |
+
selectedModel = next((modelConfig for modelConfig in self.app_config.models["seamless"] if modelConfig.name == selectedModelName), None)
|
| 935 |
+
translationLang = get_lang_from_seamlessTx_name(seamlessLangName)
|
| 936 |
+
|
| 937 |
+
if translationLang is not None:
|
| 938 |
+
translationModel = TranslationModel(modelConfig=selectedModel, whisperLang=inputLang, translationLang=translationLang, batchSize=translationBatchSize, noRepeatNgramSize=translationNoRepeatNgramSize, numBeams=translationNumBeams, torchDtypeFloat16=translationTorchDtypeFloat16, usingBitsandbytes=translationUsingBitsandbytes)
|
| 939 |
+
|
| 940 |
+
return translationLang, translationModel
|
| 941 |
+
|
| 942 |
+
|
| 943 |
def create_ui(app_config: ApplicationConfig):
|
| 944 |
translateModelMd: str = None
|
| 945 |
optionsMd: str = None
|
|
|
|
| 1204 |
|
| 1205 |
return transcribe
|
| 1206 |
|
| 1207 |
+
def create_translation(isQueueMode: bool):
|
| 1208 |
+
with gr.Blocks() as translation:
|
| 1209 |
+
translateInput = gr.State(value="m2m100", elem_id = "translateInput")
|
| 1210 |
+
with gr.Row():
|
| 1211 |
+
with gr.Column():
|
| 1212 |
+
submitBtn = gr.Button("Submit", variant="primary")
|
| 1213 |
+
with gr.Column():
|
| 1214 |
+
with gr.Tab(label="M2M100") as m2m100Tab:
|
| 1215 |
+
with gr.Row():
|
| 1216 |
+
inputDict = common_m2m100_inputs()
|
| 1217 |
+
with gr.Tab(label="NLLB") as nllbTab:
|
| 1218 |
+
with gr.Row():
|
| 1219 |
+
inputDict.update(common_nllb_inputs())
|
| 1220 |
+
with gr.Tab(label="MT5") as mt5Tab:
|
| 1221 |
+
with gr.Row():
|
| 1222 |
+
inputDict.update(common_mt5_inputs())
|
| 1223 |
+
with gr.Tab(label="ALMA") as almaTab:
|
| 1224 |
+
with gr.Row():
|
| 1225 |
+
inputDict.update(common_ALMA_inputs())
|
| 1226 |
+
with gr.Tab(label="madlad400") as madlad400Tab:
|
| 1227 |
+
with gr.Row():
|
| 1228 |
+
inputDict.update(common_madlad400_inputs())
|
| 1229 |
+
with gr.Tab(label="seamless") as seamlessTab:
|
| 1230 |
+
with gr.Row():
|
| 1231 |
+
inputDict.update(common_seamless_inputs())
|
| 1232 |
+
m2m100Tab.select(fn=lambda: "m2m100", inputs = [], outputs= [translateInput] )
|
| 1233 |
+
nllbTab.select(fn=lambda: "nllb", inputs = [], outputs= [translateInput] )
|
| 1234 |
+
mt5Tab.select(fn=lambda: "mt5", inputs = [], outputs= [translateInput] )
|
| 1235 |
+
almaTab.select(fn=lambda: "ALMA", inputs = [], outputs= [translateInput] )
|
| 1236 |
+
madlad400Tab.select(fn=lambda: "madlad400", inputs = [], outputs= [translateInput] )
|
| 1237 |
+
seamlessTab.select(fn=lambda: "seamless", inputs = [], outputs= [translateInput] )
|
| 1238 |
+
with gr.Column():
|
| 1239 |
+
inputDict.update({
|
| 1240 |
+
gr.Dropdown(label="Input - Language", choices=sorted(get_lang_whisper_names()), value=app_config.language, elem_id="inputLangName"),
|
| 1241 |
+
gr.Text(lines=5, label="Input - Text", elem_id="inputText", elem_classes="scroll-show"),
|
| 1242 |
+
})
|
| 1243 |
+
with gr.Column():
|
| 1244 |
+
with gr.Accordion("Translation options", open=False):
|
| 1245 |
+
inputDict.update(common_translation_inputs())
|
| 1246 |
+
with gr.Column():
|
| 1247 |
+
outputs = [gr.Text(label="Translation Text", autoscroll=False, show_copy_button=True, interactive=True, elem_id="outputTranslationText", elem_classes="scroll-show"),]
|
| 1248 |
+
if translateModelMd is not None:
|
| 1249 |
+
with gr.Accordion("docs/translateModel.md", open=False):
|
| 1250 |
+
gr.Markdown(translateModelMd)
|
| 1251 |
+
|
| 1252 |
+
inputDict.update({translateInput})
|
| 1253 |
+
submitBtn.click(fn=ui.translation_entry_progress if isQueueMode else ui.translation_entry,
|
| 1254 |
+
inputs=inputDict, outputs=outputs)
|
| 1255 |
+
|
| 1256 |
+
return translation
|
| 1257 |
+
|
| 1258 |
simpleTranscribe = create_transcribe(uiDescription, is_queue_mode)
|
| 1259 |
fullDescription = uiDescription + "\n\n\n\n" + "Be careful when changing some of the options in the full interface - this can cause the model to crash."
|
| 1260 |
fullTranscribe = create_transcribe(fullDescription, is_queue_mode, True)
|
| 1261 |
+
uiTranslation = create_translation(is_queue_mode)
|
| 1262 |
|
| 1263 |
+
demo = gr.TabbedInterface([simpleTranscribe, fullTranscribe, uiTranslation], tab_names=["Simple", "Full", "Translation"], css=css)
|
| 1264 |
|
| 1265 |
# Queue up the demo
|
| 1266 |
if is_queue_mode:
|
config.json5
CHANGED
|
@@ -248,6 +248,12 @@
|
|
| 248 |
"type": "huggingface",
|
| 249 |
"tokenizer_url": "jbochi/madlad400-3b-mt"
|
| 250 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 251 |
{
|
| 252 |
"name": "madlad400-10b-mt-ct2-int8_float16/SoybeanMilk",
|
| 253 |
"url": "SoybeanMilk/madlad400-10b-mt-ct2-int8_float16",
|
|
|
|
| 248 |
"type": "huggingface",
|
| 249 |
"tokenizer_url": "jbochi/madlad400-3b-mt"
|
| 250 |
},
|
| 251 |
+
{
|
| 252 |
+
"name": "madlad400-7b-mt-bt-ct2-int8_float16/avan",
|
| 253 |
+
"url": "avans06/madlad400-7b-mt-bt-ct2-int8_float16",
|
| 254 |
+
"type": "huggingface",
|
| 255 |
+
"tokenizer_url": "jbochi/madlad400-7b-mt-bt"
|
| 256 |
+
},
|
| 257 |
{
|
| 258 |
"name": "madlad400-10b-mt-ct2-int8_float16/SoybeanMilk",
|
| 259 |
"url": "SoybeanMilk/madlad400-10b-mt-ct2-int8_float16",
|
docs/translateModel.md
CHANGED
|
@@ -129,6 +129,7 @@ madlad400 is a multilingual machine translation model based on the T5 architectu
|
|
| 129 |
| Name | Parameters | Size | type/quantize | Required VRAM |
|
| 130 |
|------|------------|------|---------------|---------------|
|
| 131 |
| [SoybeanMilk/madlad400-3b-mt-ct2-int8_float16](https://huggingface.co/SoybeanMilk/madlad400-3b-mt-ct2-int8_float16) | 3B | 2.95 GB | int8_float16 | ≈2.7 GB |
|
|
|
|
| 132 |
| [SoybeanMilk/madlad400-10b-mt-ct2-int8_float16](https://huggingface.co/SoybeanMilk/madlad400-10b-mt-ct2-int8_float16) | 10.7B | 10.7 GB | int8_float16 | ≈10 GB |
|
| 133 |
|
| 134 |
## SeamlessM4T
|
|
|
|
| 129 |
| Name | Parameters | Size | type/quantize | Required VRAM |
|
| 130 |
|------|------------|------|---------------|---------------|
|
| 131 |
| [SoybeanMilk/madlad400-3b-mt-ct2-int8_float16](https://huggingface.co/SoybeanMilk/madlad400-3b-mt-ct2-int8_float16) | 3B | 2.95 GB | int8_float16 | ≈2.7 GB |
|
| 132 |
+
| [avans06/madlad400-7b-mt-bt-ct2-int8_float16](https://huggingface.co/avans06/madlad400-7b-mt-bt-ct2-int8_float16) | 7.2B | 8.31 GB | int8_float16 (finetuned on backtranslated data) | ≈8.5 GB |
|
| 133 |
| [SoybeanMilk/madlad400-10b-mt-ct2-int8_float16](https://huggingface.co/SoybeanMilk/madlad400-10b-mt-ct2-int8_float16) | 10.7B | 10.7 GB | int8_float16 | ≈10 GB |
|
| 134 |
|
| 135 |
## SeamlessM4T
|