# src/multivoice/lib/stt_langs.py
# List of languages supported by the punctuation model
punct_model_langs = [
"en",
"fr",
"de",
"es",
"it",
"nl",
"pt",
"bg",
"pl",
"cs",
"sk",
"sl",
]
# Dictionary mapping language codes to their full names
LANGUAGES = {
"en": "english",
"zh": "chinese",
"de": "german",
"es": "spanish",
"ru": "russian",
"ko": "korean",
"fr": "french",
"ja": "japanese",
"pt": "portuguese",
"tr": "turkish",
"pl": "polish",
"ca": "catalan",
"nl": "dutch",
"ar": "arabic",
"sv": "swedish",
"it": "italian",
"id": "indonesian",
"hi": "hindi",
"fi": "finnish",
"vi": "vietnamese",
"he": "hebrew",
"uk": "ukrainian",
"el": "greek",
"ms": "malay",
"cs": "czech",
"ro": "romanian",
"da": "danish",
"hu": "hungarian",
"ta": "tamil",
"no": "norwegian",
"th": "thai",
"ur": "urdu",
"hr": "croatian",
"bg": "bulgarian",
"lt": "lithuanian",
"la": "latin",
"mi": "maori",
"ml": "malayalam",
"cy": "welsh",
"sk": "slovak",
"te": "telugu",
"fa": "persian",
"lv": "latvian",
"bn": "bengali",
"sr": "serbian",
"az": "azerbaijani",
"sl": "slovenian",
"kn": "kannada",
"et": "estonian",
"mk": "macedonian",
"br": "breton",
"eu": "basque",
"is": "icelandic",
"hy": "armenian",
"ne": "nepali",
"mn": "mongolian",
"bs": "bosnian",
"kk": "kazakh",
"sq": "albanian",
"sw": "swahili",
"gl": "galician",
"mr": "marathi",
"pa": "punjabi",
"si": "sinhala",
"km": "khmer",
"sn": "shona",
"yo": "yoruba",
"so": "somali",
"af": "afrikaans",
"oc": "occitan",
"ka": "georgian",
"be": "belarusian",
"tg": "tajik",
"sd": "sindhi",
"gu": "gujarati",
"am": "amharic",
"yi": "yiddish",
"lo": "lao",
"uz": "uzbek",
"fo": "faroese",
"ht": "haitian creole",
"ps": "pashto",
"tk": "turkmen",
"nn": "nynorsk",
"mt": "maltese",
"sa": "sanskrit",
"lb": "luxembourgish",
"my": "myanmar",
"bo": "tibetan",
"tl": "tagalog",
"mg": "malagasy",
"as": "assamese",
"tt": "tatar",
"haw": "hawaiian",
"ln": "lingala",
"ha": "hausa",
"ba": "bashkir",
"jw": "javanese",
"su": "sundanese",
"yue": "cantonese",
}
# Dictionary for language name to code lookup, including aliases
TO_LANGUAGE_CODE = {
**{language: code for code, language in LANGUAGES.items()},
"burmese": "my",
"valencian": "ca",
"flemish": "nl",
"haitian": "ht",
"letzeburgesch": "lb",
"pushto": "ps",
"panjabi": "pa",
"moldavian": "ro",
"moldovan": "ro",
"sinhalese": "si",
"castilian": "es",
}
# List of languages supported by Whisper, including title case for some aliases
whisper_langs = sorted(LANGUAGES.keys()) + sorted(
[k.title() for k in TO_LANGUAGE_CODE.keys()]
)
# Dictionary mapping language codes to ISO-639-3 codes
langs_to_iso = {
"af": "afr",
"am": "amh",
"ar": "ara",
"as": "asm",
"az": "aze",
"ba": "bak",
"be": "bel",
"bg": "bul",
"bn": "ben",
"bo": "tib",
"br": "bre",
"bs": "bos",
"ca": "cat",
"cs": "cze",
"cy": "wel",
"da": "dan",
"de": "ger",
"el": "gre",
"en": "eng",
"es": "spa",
"et": "est",
"eu": "baq",
"fa": "per",
"fi": "fin",
"fo": "fao",
"fr": "fre",
"gl": "glg",
"gu": "guj",
"ha": "hau",
"haw": "haw",
"he": "heb",
"hi": "hin",
"hr": "hrv",
"ht": "hat",
"hu": "hun",
"hy": "arm",
"id": "ind",
"is": "ice",
"it": "ita",
"ja": "jpn",
"jw": "jav",
"ka": "geo",
"kk": "kaz",
"km": "khm",
"kn": "kan",
"ko": "kor",
"la": "lat",
"lb": "ltz",
"ln": "lin",
"lo": "lao",
"lt": "lit",
"lv": "lav",
"mg": "mlg",
"mi": "mao",
"mk": "mac",
"ml": "mal",
"mn": "mon",
"mr": "mar",
"ms": "may",
"mt": "mlt",
"my": "bur",
"ne": "nep",
"nl": "dut",
"nn": "nno",
"no": "nor",
"oc": "oci",
"pa": "pan",
"pl": "pol",
"ps": "pus",
"pt": "por",
"ro": "rum",
"ru": "rus",
"sa": "san",
"sd": "snd",
"si": "sin",
"sk": "slo",
"sl": "slv",
"sn": "sna",
"so": "som",
"sq": "alb",
"sr": "srp",
"su": "sun",
"sv": "swe",
"sw": "swa",
"ta": "tam",
"te": "tel",
"tg": "tgk",
"th": "tha",
"tk": "tuk",
"tl": "tgl",
"tr": "tur",
"tt": "tat",
"uk": "ukr",
"ur": "urd",
"uz": "uzb",
"vi": "vie",
"yi": "yid",
"yo": "yor",
"yue": "yue",
"zh": "chi",
}
[docs]
def process_language_arg(language: str, model_name: str):
"""
Process the language argument to make sure it's valid
and convert language names to language codes.
Parameters:
- language (str): The name or code of the language.
- model_name (str): The name of the model being used.
Returns:
- str: The processed language code.
Raises:
- ValueError: If the provided language is not supported.
"""
if language is not None:
# Convert the language to lowercase for consistency
language = language.lower()
# Check if the language is in the direct mapping
if language not in LANGUAGES:
# Check if the language is an alias and map it accordingly
if language in TO_LANGUAGE_CODE:
language = TO_LANGUAGE_CODE[language]
else:
raise ValueError(f"Unsupported language: {language}")
# Ensure that English-only models are only used with English
if model_name.endswith(".en") and language != "en":
raise ValueError(
f"{model_name} is an English-only model but chosen language is '{language}'"
)
return language