3v324v23's picture
lfs
1e3b872
from server import PromptServer
from aiohttp import web
import argostranslate.package
import argostranslate.translate
# Find packages https://www.argosopentech.com/argospm/index/
### ===== Argos Translate Node ===== ###
ALL_CODES = {
"english": {
"code": "en",
"targets": [
"albanian",
"arabic",
"azerbaijani",
"bengali",
"bulgarian",
"catalan",
"chinese",
"chinese (traditional)",
"czech",
"danish",
"dutch",
"esperanto",
"estonian",
"finnish",
"french",
"german",
"greek",
"hebrew",
"hindi",
"hungarian",
"indonesian",
"irish",
"italian",
"japanese",
"korean",
"latvian",
"lithuanian",
"malay",
"norwegian",
"persian",
"polish",
"portuguese",
"romanian",
"russian",
"slovak",
"slovenian",
"spanish",
"swedish",
"tagalog",
"thai",
"turkish",
"ukrainian",
"urdu",
],
},
"albanian": {"code": "sq", "targets": ["english"]},
"arabic": {"code": "ar", "targets": ["english"]},
"azerbaijani": {"code": "az", "targets": ["english"]},
"bengali": {"code": "bn", "targets": ["english"]},
"bulgarian": {"code": "bg", "targets": ["english"]},
"catalan": {"code": "ca", "targets": ["english"]},
"chinese": {"code": "zh", "targets": ["english"]},
"chinese (traditional)": {"code": "zt", "targets": ["english"]},
"czech": {"code": "cs", "targets": ["english"]},
"danish": {"code": "da", "targets": ["english"]},
"dutch": {"code": "nl", "targets": ["english"]},
"esperanto": {"code": "eo", "targets": ["english"]},
"estonian": {"code": "et", "targets": ["english"]},
"finnish": {"code": "fi", "targets": ["english"]},
"french": {"code": "fr", "targets": ["english"]},
"german": {"code": "de", "targets": ["english"]},
"greek": {"code": "el", "targets": ["english"]},
"hebrew": {"code": "he", "targets": ["english"]},
"hindi": {"code": "hi", "targets": ["english"]},
"hungarian": {"code": "hu", "targets": ["english"]},
"indonesian": {"code": "id", "targets": ["english"]},
"irish": {"code": "ga", "targets": ["english"]},
"italian": {"code": "it", "targets": ["english"]},
"japanese": {"code": "ja", "targets": ["english"]},
"korean": {"code": "ko", "targets": ["english"]},
"latvian": {"code": "lv", "targets": ["english"]},
"lithuanian": {"code": "lt", "targets": ["english"]},
"malay": {"code": "ms", "targets": ["english"]},
"norwegian": {"code": "nb", "targets": ["english"]},
"persian": {"code": "fa", "targets": ["english"]},
"polish": {"code": "pl", "targets": ["english"]},
"portuguese": {"code": "pt", "targets": ["english", "spanish"]},
"romanian": {"code": "ro", "targets": ["english"]},
"russian": {"code": "ru", "targets": ["english"]},
"slovak": {"code": "sk", "targets": ["english"]},
"slovenian": {"code": "sl", "targets": ["english"]},
"spanish": {"code": "es", "targets": ["english", "portuguese"]},
"swedish": {"code": "sv", "targets": ["english"]},
"tagalog": {"code": "tl", "targets": ["english"]},
"thai": {"code": "th", "targets": ["english"]},
"turkish": {"code": "tr", "targets": ["english"]},
"ukrainian": {"code": "uk", "targets": ["english"]},
"urdu": {"code": "ur", "targets": ["english"]},
}
@PromptServer.instance.routes.get("/alekpet/argo_langs_support/{lang}")
async def argo_langs_support(request):
lang = request.match_info["lang"]
if lang:
langs_support = ALL_CODES[lang]
return web.json_response(
{
"langs_support": langs_support["targets"],
"lang_code": langs_support["code"],
}
)
return web.json_response({"langs_support": [], "lang_code": "en"})
def installPackages(srcTrans, toTrans="en"):
argostranslate.package.update_package_index()
available_packages = argostranslate.package.get_available_packages()
package_to_install = next(
filter(
lambda x: x.from_code == srcTrans and x.to_code == toTrans,
available_packages,
)
)
argostranslate.package.install_from_path(package_to_install.download())
def preTranslate(prompt, srcTrans, toTrans):
if prompt and prompt.strip() != "":
installed_languages = argostranslate.translate.get_installed_languages()
from_lang = list(filter(lambda x: x.code == srcTrans, installed_languages))[0]
to_lang = list(filter(lambda x: x.code == toTrans, installed_languages))[0]
translation = from_lang.get_translation(to_lang)
translate_text_prompt = translation.translate(prompt)
return translate_text_prompt if translate_text_prompt and not None else ""
def translate(prompt, srcTrans=None, toTrans="english"):
translate_text_prompt = ""
try:
srcTransCode = ALL_CODES[srcTrans]["code"] if srcTrans is not None else None
toTransCode = ALL_CODES[toTrans]["code"]
installPackages(srcTransCode, toTransCode)
translate_text_prompt = preTranslate(prompt, srcTransCode, toTransCode)
except Exception as e:
print(e)
return "[Error] No translate text!"
return translate_text_prompt
class ArgosTranslateCLIPTextEncodeNode:
@classmethod
def INPUT_TYPES(self):
self.langs_support = ALL_CODES["russian"]["targets"]
return {
"required": {
"from_translate": (list(ALL_CODES.keys()), {"default": "russian"}),
"to_translate": (self.langs_support, {"default": "english"}),
"text": ("STRING", {"multiline": True, "placeholder": "Input text"}),
"clip": ("CLIP",),
}
}
RETURN_TYPES = (
"CONDITIONING",
"STRING",
)
FUNCTION = "argos_translate_text"
CATEGORY = "AlekPet Nodes/conditioning"
def argos_translate_text(self, from_translate, to_translate, text, clip):
self.langs_support = ALL_CODES[from_translate]["targets"]
text = translate(text, from_translate, to_translate)
tokens = clip.tokenize(text)
cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True)
return ([[cond, {"pooled_output": pooled}]], text)
@classmethod
def VALIDATE_INPUTS(cls, from_translate, to_translate, text, clip):
return True
class ArgosTranslateTextNode(ArgosTranslateCLIPTextEncodeNode):
@classmethod
def INPUT_TYPES(self):
return_types = super().INPUT_TYPES()
del return_types["required"]["clip"]
return return_types
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("text",)
FUNCTION = "argos_translate_text"
CATEGORY = "AlekPet Nodes/text"
def argos_translate_text(self, from_translate, to_translate, text):
self.langs_support = ALL_CODES[from_translate]["targets"]
text_tranlsated = translate(text, from_translate, to_translate)
return (text_tranlsated,)
@classmethod
def VALIDATE_INPUTS(cls, from_translate, to_translate, text):
return True
### ===== Argos Translate Node ===== ###