Spaces:
Runtime error
Runtime error
from argostranslate import package, translate | |
from packaging import version | |
import libretranslate.language | |
def boot(load_only=None, update_models=False, install_models=False): | |
try: | |
if update_models: | |
check_and_install_models(load_only_lang_codes=load_only, update=update_models) | |
else: | |
check_and_install_models(force=install_models, load_only_lang_codes=load_only) | |
except Exception as e: | |
print("Cannot update models (normal if you're offline): %s" % str(e)) | |
def check_and_install_models(force=False, load_only_lang_codes=None,update=False): | |
if len(package.get_installed_packages()) < 2 or force or update: | |
# Update package definitions from remote | |
print("Updating language models") | |
package.update_package_index() | |
# Load available packages from local package index | |
available_packages = package.get_available_packages() | |
installed_packages = package.get_installed_packages() | |
print("Found %s models" % len(available_packages)) | |
if load_only_lang_codes is not None: | |
# load_only_lang_codes: List[str] (codes) | |
# Ensure the user does not use any unavailable language code. | |
unavailable_lang_codes = set(load_only_lang_codes) | |
for pack in available_packages: | |
unavailable_lang_codes -= {pack.from_code, pack.to_code} | |
if unavailable_lang_codes: | |
raise ValueError( | |
"Unavailable language codes: %s." | |
% ",".join(sorted(unavailable_lang_codes)) | |
) | |
# Keep only the packages that have both from_code and to_code in our list. | |
available_packages = [ | |
pack | |
for pack in available_packages | |
if pack.from_code in load_only_lang_codes and pack.to_code in load_only_lang_codes | |
] | |
if not available_packages: | |
raise ValueError("no available package") | |
print("Keep %s models" % len(available_packages)) | |
# Download and install all available packages | |
for available_package in available_packages: | |
update = False | |
if not force: | |
for pack in installed_packages: | |
if ( | |
pack.from_code == available_package.from_code | |
and pack.to_code == available_package.to_code | |
): | |
update = True | |
if version.parse(pack.package_version) < version.parse(available_package.package_version): | |
print( | |
f"Updating {available_package} ({pack.package_version}->{available_package.package_version}) ..." | |
) | |
pack.update() | |
if not update: | |
print( | |
f"Downloading {available_package} ({available_package.package_version}) ..." | |
) | |
available_package.install() | |
# reload installed languages | |
libretranslate.language.languages = translate.get_installed_languages() | |
print( | |
f"Loaded support for {len(translate.get_installed_languages())} languages ({len(available_packages)} models total)!" | |
) | |