gburgardt commited on
Commit
22d9697
1 Parent(s): b16e981

Upload folder using huggingface_hub

Browse files
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ *pycache*
2
+ .env
.vscode/launch.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "name": "Python: Current File",
9
+ "type": "python",
10
+ "request": "launch",
11
+ "program": "${file}",
12
+ "console": "integratedTerminal",
13
+ "justMyCode": true
14
+ }
15
+ ]
16
+ }
README.md CHANGED
@@ -1,12 +1,13 @@
1
  ---
2
- title: Jaga Translate
3
- emoji: 👀
4
  colorFrom: yellow
5
- colorTo: pink
6
  sdk: gradio
7
- sdk_version: 4.32.0
8
  app_file: app.py
9
  pinned: false
10
  ---
11
 
12
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: jaga-translate
3
+ emoji: 🚀
4
  colorFrom: yellow
5
+ colorTo: red
6
  sdk: gradio
7
+ sdk_version: 4.1.2
8
  app_file: app.py
9
  pinned: false
10
  ---
11
 
12
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
13
+ Test
__init__.py ADDED
File without changes
app.py ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # from responses import start
2
+ import gradio as gr
3
+ from language_directions import *
4
+ from examples import example_sentences
5
+ import os
6
+ import asyncio
7
+ from translator import translate_text
8
+
9
+ target_lang_dict = get_all_source_languages()
10
+ target_languages = target_lang_dict.keys()
11
+
12
+ def get_target_dropdown(current_value=None):
13
+ target_languages = list(target_lang_dict.keys())
14
+ default_target_value = current_value if current_value in target_languages else None
15
+ if default_target_value is None:
16
+ if "Spanish" in target_languages or "spanish" in target_languages:
17
+ default_target_value = "Spanish"
18
+ else:
19
+ default_target_value = target_languages[0]
20
+ target_dropdown = gr.Dropdown(choices=target_languages,
21
+ value=default_target_value,
22
+ label="Target Language")
23
+ return target_dropdown
24
+
25
+ def get_dropdown_value(dropdown):
26
+ if isinstance(dropdown, gr.Dropdown):
27
+ dropdown_value = dropdown.constructor_args.get('value')
28
+ elif isinstance(dropdown, str):
29
+ dropdown_value = dropdown
30
+ return dropdown_value
31
+
32
+ def get_dropdowns(target_dropdown):
33
+ target_language_name = get_dropdown_value(target_dropdown)
34
+ target_dropdown = get_target_dropdown(current_value=target_language_name)
35
+ return target_dropdown
36
+
37
+ def input_changed(target_language_dropdown):
38
+ return get_dropdowns(target_dropdown=target_language_dropdown)
39
+
40
+ async def translate(input_text, target):
41
+ print(f"Translating text: {input_text}")
42
+ print(f"Target language: {target}")
43
+ if target in target_lang_dict.keys():
44
+ target = target_lang_dict[target]
45
+ else:
46
+ raise KeyError(f"Target language {target} not found in target_lang_dict")
47
+ print(f"Resolved target language: {target}")
48
+ translation = await translate_text(input_text, target)
49
+ print(f"Translation result: {translation}")
50
+ # Ensure newlines are properly parsed
51
+ translation = translation.replace("\\n", "\n")
52
+ return translation, ""
53
+
54
+ with gr.Blocks() as demo:
55
+ gr.HTML("""<html>
56
+ <head>
57
+ <style>
58
+ h1 {
59
+ text-align: center;
60
+ }
61
+ </style>
62
+ </head>
63
+ <body>
64
+ <h1>Jaga 3.1</h1>
65
+ </body>
66
+ </html>""")
67
+ with gr.Row():
68
+ with gr.Column():
69
+ input_textbox = gr.Textbox(lines=5, placeholder="Enter text to translate (source language will be auto-detected)", label="Input Text")
70
+ with gr.Column():
71
+ target_language_dropdown = gr.Dropdown(choices=target_languages,
72
+ value="Spanish" if "Spanish" in target_languages else list(target_languages)[0],
73
+ label="Target Language")
74
+ translated_textbox = gr.Textbox(lines=5, placeholder="", label="Translated Text")
75
+ info_label = gr.HTML("")
76
+ btn = gr.Button("Translate")
77
+ input_textbox.change(input_changed, inputs=[target_language_dropdown], outputs=[target_language_dropdown])
78
+ btn.click(lambda *args: asyncio.run(translate(*args)), inputs=[input_textbox,
79
+ target_language_dropdown],
80
+ outputs=[translated_textbox, info_label])
81
+ gr.Examples(example_sentences, inputs=[input_textbox])
82
+
83
+ if __name__ == "__main__":
84
+ print("Launching Gradio app...")
85
+ print(f"Environment Variables: OPENAI_API_KEY={os.getenv('OPENAI_API_KEY')}, LANGCHAIN_API_KEY={os.getenv('LANGCHAIN_API_KEY')}, LANGCHAIN_HUB_API_KEY={os.getenv('LANGCHAIN_HUB_API_KEY')}")
86
+ demo.launch(share=True, space="GetGloby/jaga-3")
examples.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ example_sentences = [
2
+ "Je te rencontre au café", "Répétez s'il vous plaît.",
3
+ "The mountains stand tall, embracing the clouds with their majestic peaks.",
4
+ "सितारों का आकाश में खोया होने का एहसास मन को अद्वितीय सुख देता है।",
5
+ "ਜਟ ਦਾ ਮੁਕਾਬਲਾ ਦਸ ਮੈਨੂੰ ਕਿਥੇ ਆ ਨੀ।",
6
+ "Il profumo dei fiori primaverili riempie l'aria, portando gioia e speranza.",
7
+ "Güneş batarken, gökyüzünü altın rengine boyuyor ve doğayı sihirli bir atmosfere bürüyor.",
8
+ "De wind fluistert door de bomen, een symfonie van rust en harmonie.",
9
+ "눈이 하얗게 내리고, 숲은 고요로움으로 가득 차 있습니다.",
10
+ "הכוכבים מאירים בשמי הלילה, משאירים את הלב פתוח לקסמם.",
11
+ "Hương hoa lan tỏa trong không khí, mang lại cảm giác êm đềm và sự bình yên.",
12
+ "Regnet faller mjukt mot marken, skapar en känsla av förnyelse och friskhet.",
13
+ "Η θάλασσα χτυπά την ακτή με απαλές κύματα, φέρνοντας ηρεμία και γαλήνη στην ψυχή.",
14
+ ]
helsinki_models.py ADDED
@@ -0,0 +1,1457 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Scraped from https://huggingface.co/Helsinki-NLP
2
+ # Scrape code:
3
+ # console.log(Array.from(document.getElementsByClassName("text-md truncate font-mono text-black dark:group-hover/repo:text-yellow-500 group-hover/repo:text-indigo-600 text-smd")).map(element => element.innerHTML));
4
+
5
+ helsinki_models = [
6
+ "Helsinki-NLP/opus-mt-tc-base-bat-zle",
7
+ "Helsinki-NLP/opus-mt-tc-base-uk-tr",
8
+ "Helsinki-NLP/opus-mt-tc-base-hu-uk",
9
+ "Helsinki-NLP/opus-mt-tc-base-uk-ces_slk",
10
+ "Helsinki-NLP/opus-mt-tc-base-zle-bat",
11
+ "Helsinki-NLP/opus-mt-tc-base-uk-fi",
12
+ "Helsinki-NLP/opus-mt-tc-base-uk-hu",
13
+ "Helsinki-NLP/opus-mt-tc-base-tr-uk",
14
+ "Helsinki-NLP/opus-mt-tc-base-uk-ro",
15
+ "Helsinki-NLP/opus-mt-tc-base-ro-uk",
16
+ "Helsinki-NLP/opus-mt-tc-base-fi-uk",
17
+ "Helsinki-NLP/opus-tatoeba-af-ru",
18
+ "Helsinki-NLP/opus-mt-tc-base-gmw-gmw",
19
+ "Helsinki-NLP/opus-tatoeba-de-ro",
20
+ "Helsinki-NLP/opus-mt-zlw-fiu",
21
+ "Helsinki-NLP/opus-tatoeba-en-ro",
22
+ "Helsinki-NLP/opus-mt-tc-base-en-sh",
23
+ "Helsinki-NLP/opus-tatoeba-fi-en",
24
+ "Helsinki-NLP/opus-mt-tc-big-zle-gmq",
25
+ "Helsinki-NLP/opus-mt-tc-big-gmq-he",
26
+ "Helsinki-NLP/opus-mt-tc-big-zle-pt",
27
+ "Helsinki-NLP/opus-mt-tc-big-zle-fi",
28
+ "Helsinki-NLP/opus-mt-tc-big-zle-it",
29
+ "Helsinki-NLP/opus-mt-tc-big-ar-gmq",
30
+ "Helsinki-NLP/opus-mt-tc-big-fi-zle",
31
+ "Helsinki-NLP/opus-mt-tc-big-gmq-zle",
32
+ "Helsinki-NLP/opus-mt-tc-big-zle-zls",
33
+ "Helsinki-NLP/opus-mt-tc-big-itc-eu",
34
+ "Helsinki-NLP/opus-mt-tc-big-itc-ar",
35
+ "Helsinki-NLP/opus-mt-tc-big-zle-itc",
36
+ "Helsinki-NLP/opus-mt-tc-big-gmq-tr",
37
+ "Helsinki-NLP/opus-mt-tc-big-gmq-zlw",
38
+ "Helsinki-NLP/opus-mt-tc-big-zls-itc",
39
+ "Helsinki-NLP/opus-mt-tc-big-gmq-ar",
40
+ "Helsinki-NLP/opus-mt-tc-big-zls-zle",
41
+ "Helsinki-NLP/opus-mt-tc-big-zle-es",
42
+ "Helsinki-NLP/opus-mt-tc-big-zle-fr",
43
+ "Helsinki-NLP/opus-mt-tc-big-he-itc",
44
+ "Helsinki-NLP/opus-mt-tc-big-he-gmq",
45
+ "Helsinki-NLP/opus-mt-tc-big-itc-he",
46
+ "Helsinki-NLP/opus-mt-tc-big-cel-en",
47
+ "Helsinki-NLP/opus-mt-tc-big-de-gmq",
48
+ "Helsinki-NLP/opus-mt-tc-big-zle-zle",
49
+ "Helsinki-NLP/opus-mt-tc-big-es-zle",
50
+ "Helsinki-NLP/opus-mt-tc-big-gmq-itc",
51
+ "Helsinki-NLP/opus-mt-tc-big-zle-zlw",
52
+ "Helsinki-NLP/opus-mt-tc-big-it-zle",
53
+ "Helsinki-NLP/opus-mt-tc-big-fr-zle",
54
+ "Helsinki-NLP/opus-mt-tc-big-pt-zle",
55
+ "Helsinki-NLP/opus-mt-tc-big-zlw-zle",
56
+ "Helsinki-NLP/opus-mt-tc-big-fi-zls",
57
+ "Helsinki-NLP/opus-mt-tc-big-de-zle",
58
+ "Helsinki-NLP/opus-mt-tc-big-gmq-gmq",
59
+ "Helsinki-NLP/opus-mt-tc-big-itc-tr",
60
+ "Helsinki-NLP/opus-mt-tc-big-de-es",
61
+ "Helsinki-NLP/opus-mt-tc-big-zlw-en",
62
+ "Helsinki-NLP/opus-mt-tc-big-fa-itc",
63
+ "Helsinki-NLP/opus-mt-tc-big-ar-itc",
64
+ "Helsinki-NLP/opus-mt-tc-big-eu-itc",
65
+ "Helsinki-NLP/opus-mt-tc-big-fa-gmq",
66
+ "Helsinki-NLP/opus-mt-tc-big-zls-de",
67
+ "Helsinki-NLP/opus-mt-tc-big-itc-itc",
68
+ "Helsinki-NLP/opus-mt-tc-big-lv-en",
69
+ "Helsinki-NLP/opus-mt-tc-big-en-et",
70
+ "Helsinki-NLP/opus-mt-tc-big-gmq-en",
71
+ "Helsinki-NLP/opus-mt-tc-big-en-ces_slk",
72
+ "Helsinki-NLP/opus-mt-tc-big-en-lv",
73
+ "Helsinki-NLP/opus-mt-tc-big-bg-en",
74
+ "Helsinki-NLP/opus-mt-tc-big-en-el",
75
+ "Helsinki-NLP/opus-mt-tc-big-en-bg",
76
+ "Helsinki-NLP/opus-mt-tc-big-en-ro",
77
+ "Helsinki-NLP/opus-mt-tc-big-hu-en",
78
+ "Helsinki-NLP/opus-mt-tc-big-zh-ja",
79
+ "Helsinki-NLP/opus-mt-tc-big-en-lt",
80
+ "Helsinki-NLP/opus-mt-tc-big-zle-de",
81
+ "Helsinki-NLP/opus-mt-tc-big-en-hu",
82
+ "Helsinki-NLP/opus-mt-tc-big-en-zle",
83
+ "Helsinki-NLP/opus-mt-tc-big-en-cat_oci_spa",
84
+ "Helsinki-NLP/opus-mt-tc-big-lt-en",
85
+ "Helsinki-NLP/opus-mt-tc-big-ko-en",
86
+ "Helsinki-NLP/opus-mt-tc-big-et-en",
87
+ "Helsinki-NLP/opus-mt-tc-big-en-gmq",
88
+ "Helsinki-NLP/opus-mt-tc-big-en-it",
89
+ "Helsinki-NLP/opus-mt-tc-big-sh-en",
90
+ "Helsinki-NLP/opus-mt-tc-big-zls-en",
91
+ "Helsinki-NLP/opus-mt-tc-big-en-ko",
92
+ "Helsinki-NLP/opus-mt-tc-big-zle-en",
93
+ "Helsinki-NLP/opus-mt-tc-big-en-es",
94
+ "Helsinki-NLP/opus-mt-tc-big-en-fi",
95
+ "Helsinki-NLP/opus-mt-tc-big-fr-en",
96
+ "Helsinki-NLP/opus-mt-tc-big-he-en",
97
+ "Helsinki-NLP/opus-mt-tc-big-en-fr",
98
+ "Helsinki-NLP/opus-mt-tc-big-en-ar",
99
+ "Helsinki-NLP/opus-mt-tc-big-en-pt",
100
+ "Helsinki-NLP/opus-mt-tc-big-gmw-gmw",
101
+ "Helsinki-NLP/opus-tatoeba-en-ja",
102
+ "Helsinki-NLP/opus-mt-tc-big-itc-bat",
103
+ "Helsinki-NLP/opus-mt-tc-big-tr-en",
104
+ "Helsinki-NLP/opus-mt-tc-big-it-en",
105
+ "Helsinki-NLP/opus-mt-tc-big-el-en",
106
+ "Helsinki-NLP/opus-mt-tc-big-ces_slk-en",
107
+ "Helsinki-NLP/opus-mt-tc-big-cat_oci_spa-en",
108
+ "Helsinki-NLP/opus-mt-tc-big-ar-en",
109
+ "Helsinki-NLP/opus-mt-tc-big-en-tr",
110
+ "Helsinki-NLP/opus-mt-tc-base-ces_slk-uk",
111
+ "Helsinki-NLP/opus-mt-tc-big-fi-en",
112
+ "Helsinki-NLP/opus-tatoeba-it-he",
113
+ "Helsinki-NLP/opus-tatoeba-he-it",
114
+ "Helsinki-NLP/opus-tatoeba-he-fr",
115
+ "Helsinki-NLP/opus-tatoeba-fr-it",
116
+ "Helsinki-NLP/opus-tatoeba-es-zh",
117
+ "Helsinki-NLP/opus-tatoeba-en-tr",
118
+ "Helsinki-NLP/opus-mt-zne-sv",
119
+ "Helsinki-NLP/opus-mt-zne-fr",
120
+ "Helsinki-NLP/opus-mt-zne-fi",
121
+ "Helsinki-NLP/opus-mt-zne-es",
122
+ "Helsinki-NLP/opus-mt-zlw-zlw",
123
+ "Helsinki-NLP/opus-mt-zlw-en",
124
+ "Helsinki-NLP/opus-mt-zls-zls",
125
+ "Helsinki-NLP/opus-mt-zls-en",
126
+ "Helsinki-NLP/opus-mt-zle-zle",
127
+ "Helsinki-NLP/opus-mt-zle-en",
128
+ "Helsinki-NLP/opus-mt-zh-vi",
129
+ "Helsinki-NLP/opus-mt-zh-uk",
130
+ "Helsinki-NLP/opus-mt-zh-sv",
131
+ "Helsinki-NLP/opus-mt-zh-nl",
132
+ "Helsinki-NLP/opus-mt-zh-ms",
133
+ "Helsinki-NLP/opus-mt-zh-it",
134
+ "Helsinki-NLP/opus-mt-zh-he",
135
+ "Helsinki-NLP/opus-mt-zh-fi",
136
+ "Helsinki-NLP/opus-mt-zh-en",
137
+ "Helsinki-NLP/opus-mt-zh-de",
138
+ "Helsinki-NLP/opus-mt-zh-bg",
139
+ "Helsinki-NLP/opus-mt-zai-es",
140
+ "Helsinki-NLP/opus-mt-yo-sv",
141
+ "Helsinki-NLP/opus-mt-yo-fr",
142
+ "Helsinki-NLP/opus-mt-yo-fi",
143
+ "Helsinki-NLP/opus-mt-yo-es",
144
+ "Helsinki-NLP/opus-mt-yo-en",
145
+ "Helsinki-NLP/opus-mt-yap-sv",
146
+ "Helsinki-NLP/opus-mt-yap-fr",
147
+ "Helsinki-NLP/opus-mt-yap-en",
148
+ "Helsinki-NLP/opus-mt-xh-sv",
149
+ "Helsinki-NLP/opus-mt-xh-fr",
150
+ "Helsinki-NLP/opus-mt-xh-es",
151
+ "Helsinki-NLP/opus-mt-xh-en",
152
+ "Helsinki-NLP/opus-mt-wls-sv",
153
+ "Helsinki-NLP/opus-mt-wls-fr",
154
+ "Helsinki-NLP/opus-mt-wls-en",
155
+ "Helsinki-NLP/opus-mt-war-sv",
156
+ "Helsinki-NLP/opus-mt-war-fr",
157
+ "Helsinki-NLP/opus-mt-war-fi",
158
+ "Helsinki-NLP/opus-mt-war-es",
159
+ "Helsinki-NLP/opus-mt-war-en",
160
+ "Helsinki-NLP/opus-mt-wal-en",
161
+ "Helsinki-NLP/opus-mt-wa-en",
162
+ "Helsinki-NLP/opus-mt-vsl-es",
163
+ "Helsinki-NLP/opus-mt-vi-ru",
164
+ "Helsinki-NLP/opus-mt-vi-it",
165
+ "Helsinki-NLP/opus-mt-vi-fr",
166
+ "Helsinki-NLP/opus-mt-vi-es",
167
+ "Helsinki-NLP/opus-mt-vi-eo",
168
+ "Helsinki-NLP/opus-mt-vi-en",
169
+ "Helsinki-NLP/opus-mt-vi-de",
170
+ "Helsinki-NLP/opus-mt-ve-es",
171
+ "Helsinki-NLP/opus-mt-ve-en",
172
+ "Helsinki-NLP/opus-mt-urj-urj",
173
+ "Helsinki-NLP/opus-mt-urj-en",
174
+ "Helsinki-NLP/opus-mt-ur-en",
175
+ "Helsinki-NLP/opus-mt-umb-en",
176
+ "Helsinki-NLP/opus-mt-uk-tr",
177
+ "Helsinki-NLP/opus-mt-uk-sv",
178
+ "Helsinki-NLP/opus-mt-uk-sl",
179
+ "Helsinki-NLP/opus-mt-uk-sh",
180
+ "Helsinki-NLP/opus-mt-uk-ru",
181
+ "Helsinki-NLP/opus-mt-uk-pt",
182
+ "Helsinki-NLP/opus-mt-uk-pl",
183
+ "Helsinki-NLP/opus-mt-uk-no",
184
+ "Helsinki-NLP/opus-mt-uk-nl",
185
+ "Helsinki-NLP/opus-mt-uk-it",
186
+ "Helsinki-NLP/opus-mt-uk-hu",
187
+ "Helsinki-NLP/opus-mt-uk-he",
188
+ "Helsinki-NLP/opus-mt-uk-fr",
189
+ "Helsinki-NLP/opus-mt-uk-fi",
190
+ "Helsinki-NLP/opus-mt-uk-es",
191
+ "Helsinki-NLP/opus-mt-uk-en",
192
+ "Helsinki-NLP/opus-mt-uk-de",
193
+ "Helsinki-NLP/opus-mt-uk-cs",
194
+ "Helsinki-NLP/opus-mt-uk-ca",
195
+ "Helsinki-NLP/opus-mt-uk-bg",
196
+ "Helsinki-NLP/opus-mt-tzo-es",
197
+ "Helsinki-NLP/opus-mt-ty-sv",
198
+ "Helsinki-NLP/opus-mt-ty-fr",
199
+ "Helsinki-NLP/opus-mt-ty-fi",
200
+ "Helsinki-NLP/opus-mt-ty-es",
201
+ "Helsinki-NLP/opus-mt-tw-sv",
202
+ "Helsinki-NLP/opus-mt-tw-fr",
203
+ "Helsinki-NLP/opus-mt-tw-fi",
204
+ "Helsinki-NLP/opus-mt-tw-es",
205
+ "Helsinki-NLP/opus-mt-tvl-sv",
206
+ "Helsinki-NLP/opus-mt-tvl-fr",
207
+ "Helsinki-NLP/opus-mt-tvl-fi",
208
+ "Helsinki-NLP/opus-mt-tvl-es",
209
+ "Helsinki-NLP/opus-mt-tvl-en",
210
+ "Helsinki-NLP/opus-mt-tum-sv",
211
+ "Helsinki-NLP/opus-mt-tum-fr",
212
+ "Helsinki-NLP/opus-mt-tum-es",
213
+ "Helsinki-NLP/opus-mt-tum-en",
214
+ "Helsinki-NLP/opus-mt-ts-sv",
215
+ "Helsinki-NLP/opus-mt-ts-fr",
216
+ "Helsinki-NLP/opus-mt-ts-fi",
217
+ "Helsinki-NLP/opus-mt-ts-es",
218
+ "Helsinki-NLP/opus-mt-ts-en",
219
+ "Helsinki-NLP/opus-mt-trk-en",
220
+ "Helsinki-NLP/opus-mt-tr-uk",
221
+ "Helsinki-NLP/opus-mt-tr-sv",
222
+ "Helsinki-NLP/opus-mt-tr-lt",
223
+ "Helsinki-NLP/opus-mt-tr-fr",
224
+ "Helsinki-NLP/opus-mt-tr-es",
225
+ "Helsinki-NLP/opus-mt-tr-eo",
226
+ "Helsinki-NLP/opus-mt-tr-en",
227
+ "Helsinki-NLP/opus-mt-tr-az",
228
+ "Helsinki-NLP/opus-mt-tr-ar",
229
+ "Helsinki-NLP/opus-mt-tpi-sv",
230
+ "Helsinki-NLP/opus-mt-tpi-en",
231
+ "Helsinki-NLP/opus-mt-toi-sv",
232
+ "Helsinki-NLP/opus-mt-toi-fr",
233
+ "Helsinki-NLP/opus-mt-toi-fi",
234
+ "Helsinki-NLP/opus-mt-toi-es",
235
+ "Helsinki-NLP/opus-mt-toi-en",
236
+ "Helsinki-NLP/opus-mt-to-sv",
237
+ "Helsinki-NLP/opus-mt-to-fr",
238
+ "Helsinki-NLP/opus-mt-to-es",
239
+ "Helsinki-NLP/opus-mt-to-en",
240
+ "Helsinki-NLP/opus-mt-tn-sv",
241
+ "Helsinki-NLP/opus-mt-tn-fr",
242
+ "Helsinki-NLP/opus-mt-tn-es",
243
+ "Helsinki-NLP/opus-mt-tn-en",
244
+ "Helsinki-NLP/opus-mt-tll-sv",
245
+ "Helsinki-NLP/opus-mt-tll-fr",
246
+ "Helsinki-NLP/opus-mt-tll-fi",
247
+ "Helsinki-NLP/opus-mt-tll-es",
248
+ "Helsinki-NLP/opus-mt-tll-en",
249
+ "Helsinki-NLP/opus-mt-tl-pt",
250
+ "Helsinki-NLP/opus-mt-tl-es",
251
+ "Helsinki-NLP/opus-mt-tl-en",
252
+ "Helsinki-NLP/opus-mt-tl-de",
253
+ "Helsinki-NLP/opus-mt-tiv-sv",
254
+ "Helsinki-NLP/opus-mt-tiv-fr",
255
+ "Helsinki-NLP/opus-mt-tiv-en",
256
+ "Helsinki-NLP/opus-mt-ti-en",
257
+ "Helsinki-NLP/opus-mt-th-fr",
258
+ "Helsinki-NLP/opus-mt-th-en",
259
+ "Helsinki-NLP/opus-mt-taw-en",
260
+ "Helsinki-NLP/opus-mt-swc-sv",
261
+ "Helsinki-NLP/opus-mt-swc-fr",
262
+ "Helsinki-NLP/opus-mt-swc-fi",
263
+ "Helsinki-NLP/opus-mt-swc-es",
264
+ "Helsinki-NLP/opus-mt-swc-en",
265
+ "Helsinki-NLP/opus-mt-sv-zne",
266
+ "Helsinki-NLP/opus-mt-sv-yo",
267
+ "Helsinki-NLP/opus-mt-sv-yap",
268
+ "Helsinki-NLP/opus-mt-sv-xh",
269
+ "Helsinki-NLP/opus-mt-sv-wls",
270
+ "Helsinki-NLP/opus-mt-sv-war",
271
+ "Helsinki-NLP/opus-mt-sv-ve",
272
+ "Helsinki-NLP/opus-mt-sv-umb",
273
+ "Helsinki-NLP/opus-mt-sv-uk",
274
+ "Helsinki-NLP/opus-mt-sv-ty",
275
+ "Helsinki-NLP/opus-mt-sv-tw",
276
+ "Helsinki-NLP/opus-mt-sv-tvl",
277
+ "Helsinki-NLP/opus-mt-sv-tum",
278
+ "Helsinki-NLP/opus-mt-sv-ts",
279
+ "Helsinki-NLP/opus-mt-sv-tpi",
280
+ "Helsinki-NLP/opus-mt-sv-toi",
281
+ "Helsinki-NLP/opus-mt-sv-to",
282
+ "Helsinki-NLP/opus-mt-sv-tn",
283
+ "Helsinki-NLP/opus-mt-sv-tll",
284
+ "Helsinki-NLP/opus-mt-sv-tiv",
285
+ "Helsinki-NLP/opus-mt-sv-th",
286
+ "Helsinki-NLP/opus-mt-sv-swc",
287
+ "Helsinki-NLP/opus-mt-sv-sv",
288
+ "Helsinki-NLP/opus-mt-sv-st",
289
+ "Helsinki-NLP/opus-mt-sv-srn",
290
+ "Helsinki-NLP/opus-mt-sv-sq",
291
+ "Helsinki-NLP/opus-mt-sv-sn",
292
+ "Helsinki-NLP/opus-mt-sv-sm",
293
+ "Helsinki-NLP/opus-mt-sv-sl",
294
+ "Helsinki-NLP/opus-mt-sv-sk",
295
+ "Helsinki-NLP/opus-mt-sv-sg",
296
+ "Helsinki-NLP/opus-mt-sv-rw",
297
+ "Helsinki-NLP/opus-mt-sv-run",
298
+ "Helsinki-NLP/opus-mt-sv-ru",
299
+ "Helsinki-NLP/opus-mt-sv-ro",
300
+ "Helsinki-NLP/opus-mt-sv-rnd",
301
+ "Helsinki-NLP/opus-mt-sv-pon",
302
+ "Helsinki-NLP/opus-mt-sv-pis",
303
+ "Helsinki-NLP/opus-mt-sv-pap",
304
+ "Helsinki-NLP/opus-mt-sv-pag",
305
+ "Helsinki-NLP/opus-mt-sv-ny",
306
+ "Helsinki-NLP/opus-mt-sv-nso",
307
+ "Helsinki-NLP/opus-mt-sv-no",
308
+ "Helsinki-NLP/opus-mt-sv-nl",
309
+ "Helsinki-NLP/opus-mt-sv-niu",
310
+ "Helsinki-NLP/opus-mt-sv-mt",
311
+ "Helsinki-NLP/opus-mt-sv-mos",
312
+ "Helsinki-NLP/opus-mt-sv-mh",
313
+ "Helsinki-NLP/opus-mt-sv-mfe",
314
+ "Helsinki-NLP/opus-mt-sv-lv",
315
+ "Helsinki-NLP/opus-mt-sv-lus",
316
+ "Helsinki-NLP/opus-mt-sv-lue",
317
+ "Helsinki-NLP/opus-mt-sv-lua",
318
+ "Helsinki-NLP/opus-mt-sv-lu",
319
+ "Helsinki-NLP/opus-mt-sv-ln",
320
+ "Helsinki-NLP/opus-mt-sv-lg",
321
+ "Helsinki-NLP/opus-mt-sv-kwy",
322
+ "Helsinki-NLP/opus-mt-sv-kqn",
323
+ "Helsinki-NLP/opus-mt-sv-kg",
324
+ "Helsinki-NLP/opus-mt-sv-iso",
325
+ "Helsinki-NLP/opus-mt-sv-is",
326
+ "Helsinki-NLP/opus-mt-sv-ilo",
327
+ "Helsinki-NLP/opus-mt-sv-ig",
328
+ "Helsinki-NLP/opus-mt-sv-id",
329
+ "Helsinki-NLP/opus-mt-sv-hu",
330
+ "Helsinki-NLP/opus-mt-sv-ht",
331
+ "Helsinki-NLP/opus-mt-sv-hr",
332
+ "Helsinki-NLP/opus-mt-sv-ho",
333
+ "Helsinki-NLP/opus-mt-sv-hil",
334
+ "Helsinki-NLP/opus-mt-sv-he",
335
+ "Helsinki-NLP/opus-mt-sv-ha",
336
+ "Helsinki-NLP/opus-mt-sv-guw",
337
+ "Helsinki-NLP/opus-mt-sv-gil",
338
+ "Helsinki-NLP/opus-mt-sv-gaa",
339
+ "Helsinki-NLP/opus-mt-sv-fr",
340
+ "Helsinki-NLP/opus-mt-sv-fj",
341
+ "Helsinki-NLP/opus-mt-sv-fi",
342
+ "Helsinki-NLP/opus-mt-sv-et",
343
+ "Helsinki-NLP/opus-mt-sv-es",
344
+ "Helsinki-NLP/opus-mt-sv-eo",
345
+ "Helsinki-NLP/opus-mt-sv-en",
346
+ "Helsinki-NLP/opus-mt-sv-el",
347
+ "Helsinki-NLP/opus-mt-sv-efi",
348
+ "Helsinki-NLP/opus-mt-sv-ee",
349
+ "Helsinki-NLP/opus-mt-sv-cs",
350
+ "Helsinki-NLP/opus-mt-sv-crs",
351
+ "Helsinki-NLP/opus-mt-sv-chk",
352
+ "Helsinki-NLP/opus-mt-sv-ceb",
353
+ "Helsinki-NLP/opus-mt-sv-bzs",
354
+ "Helsinki-NLP/opus-mt-sv-bi",
355
+ "Helsinki-NLP/opus-mt-sv-bg",
356
+ "Helsinki-NLP/opus-mt-sv-bem",
357
+ "Helsinki-NLP/opus-mt-sv-bcl",
358
+ "Helsinki-NLP/opus-mt-sv-ase",
359
+ "Helsinki-NLP/opus-mt-sv-af",
360
+ "Helsinki-NLP/opus-mt-sv-ZH",
361
+ "Helsinki-NLP/opus-mt-sv-NORWAY",
362
+ "Helsinki-NLP/opus-mt-st-sv",
363
+ "Helsinki-NLP/opus-mt-st-fr",
364
+ "Helsinki-NLP/opus-mt-st-fi",
365
+ "Helsinki-NLP/opus-mt-st-es",
366
+ "Helsinki-NLP/opus-mt-st-en",
367
+ "Helsinki-NLP/opus-mt-ssp-es",
368
+ "Helsinki-NLP/opus-mt-ss-en",
369
+ "Helsinki-NLP/opus-mt-srn-sv",
370
+ "Helsinki-NLP/opus-mt-srn-fr",
371
+ "Helsinki-NLP/opus-mt-srn-es",
372
+ "Helsinki-NLP/opus-mt-srn-en",
373
+ "Helsinki-NLP/opus-mt-sq-sv",
374
+ "Helsinki-NLP/opus-mt-sq-es",
375
+ "Helsinki-NLP/opus-mt-sq-en",
376
+ "Helsinki-NLP/opus-mt-sn-sv",
377
+ "Helsinki-NLP/opus-mt-sn-fr",
378
+ "Helsinki-NLP/opus-mt-sn-es",
379
+ "Helsinki-NLP/opus-mt-sn-en",
380
+ "Helsinki-NLP/opus-mt-sm-fr",
381
+ "Helsinki-NLP/opus-mt-sm-es",
382
+ "Helsinki-NLP/opus-mt-sm-en",
383
+ "Helsinki-NLP/opus-mt-sla-sla",
384
+ "Helsinki-NLP/opus-mt-sla-en",
385
+ "Helsinki-NLP/opus-mt-sl-uk",
386
+ "Helsinki-NLP/opus-mt-sl-sv",
387
+ "Helsinki-NLP/opus-mt-sl-ru",
388
+ "Helsinki-NLP/opus-mt-sl-fr",
389
+ "Helsinki-NLP/opus-mt-sl-fi",
390
+ "Helsinki-NLP/opus-mt-sl-es",
391
+ "Helsinki-NLP/opus-mt-sk-sv",
392
+ "Helsinki-NLP/opus-mt-sk-fr",
393
+ "Helsinki-NLP/opus-mt-sk-fi",
394
+ "Helsinki-NLP/opus-mt-sk-es",
395
+ "Helsinki-NLP/opus-mt-sk-en",
396
+ "Helsinki-NLP/opus-mt-sh-uk",
397
+ "Helsinki-NLP/opus-mt-sh-eo",
398
+ "Helsinki-NLP/opus-mt-sg-sv",
399
+ "Helsinki-NLP/opus-mt-sg-fr",
400
+ "Helsinki-NLP/opus-mt-sg-fi",
401
+ "Helsinki-NLP/opus-mt-sg-es",
402
+ "Helsinki-NLP/opus-mt-sg-en",
403
+ "Helsinki-NLP/opus-mt-sem-sem",
404
+ "Helsinki-NLP/opus-mt-sem-en",
405
+ "Helsinki-NLP/opus-mt-sal-en",
406
+ "Helsinki-NLP/opus-mt-rw-sv",
407
+ "Helsinki-NLP/opus-mt-rw-fr",
408
+ "Helsinki-NLP/opus-mt-rw-es",
409
+ "Helsinki-NLP/opus-mt-rw-en",
410
+ "Helsinki-NLP/opus-mt-run-sv",
411
+ "Helsinki-NLP/opus-mt-run-es",
412
+ "Helsinki-NLP/opus-mt-run-en",
413
+ "Helsinki-NLP/opus-mt-ru-vi",
414
+ "Helsinki-NLP/opus-mt-ru-uk",
415
+ "Helsinki-NLP/opus-mt-ru-sv",
416
+ "Helsinki-NLP/opus-mt-ru-sl",
417
+ "Helsinki-NLP/opus-mt-ru-no",
418
+ "Helsinki-NLP/opus-mt-ru-lv",
419
+ "Helsinki-NLP/opus-mt-ru-lt",
420
+ "Helsinki-NLP/opus-mt-ru-hy",
421
+ "Helsinki-NLP/opus-mt-ru-he",
422
+ "Helsinki-NLP/opus-mt-ru-fr",
423
+ "Helsinki-NLP/opus-mt-ru-fi",
424
+ "Helsinki-NLP/opus-mt-ru-eu",
425
+ "Helsinki-NLP/opus-mt-ru-et",
426
+ "Helsinki-NLP/opus-mt-ru-es",
427
+ "Helsinki-NLP/opus-mt-ru-eo",
428
+ "Helsinki-NLP/opus-mt-ru-en",
429
+ "Helsinki-NLP/opus-mt-ru-da",
430
+ "Helsinki-NLP/opus-mt-ru-bg",
431
+ "Helsinki-NLP/opus-mt-ru-ar",
432
+ "Helsinki-NLP/opus-mt-ru-af",
433
+ "Helsinki-NLP/opus-mt-roa-en",
434
+ "Helsinki-NLP/opus-mt-ro-sv",
435
+ "Helsinki-NLP/opus-mt-ro-fr",
436
+ "Helsinki-NLP/opus-mt-ro-fi",
437
+ "Helsinki-NLP/opus-mt-ro-eo",
438
+ "Helsinki-NLP/opus-mt-rnd-sv",
439
+ "Helsinki-NLP/opus-mt-rnd-fr",
440
+ "Helsinki-NLP/opus-mt-rnd-en",
441
+ "Helsinki-NLP/opus-mt-rn-ru",
442
+ "Helsinki-NLP/opus-mt-rn-fr",
443
+ "Helsinki-NLP/opus-mt-rn-es",
444
+ "Helsinki-NLP/opus-mt-rn-en",
445
+ "Helsinki-NLP/opus-mt-rn-de",
446
+ "Helsinki-NLP/opus-mt-pt-uk",
447
+ "Helsinki-NLP/opus-mt-pt-tl",
448
+ "Helsinki-NLP/opus-mt-pt-gl",
449
+ "Helsinki-NLP/opus-mt-pt-eo",
450
+ "Helsinki-NLP/opus-mt-pt-ca",
451
+ "Helsinki-NLP/opus-mt-prl-es",
452
+ "Helsinki-NLP/opus-mt-pqe-en",
453
+ "Helsinki-NLP/opus-mt-pon-sv",
454
+ "Helsinki-NLP/opus-mt-pon-fr",
455
+ "Helsinki-NLP/opus-mt-pon-fi",
456
+ "Helsinki-NLP/opus-mt-pon-es",
457
+ "Helsinki-NLP/opus-mt-pon-en",
458
+ "Helsinki-NLP/opus-mt-pl-uk",
459
+ "Helsinki-NLP/opus-mt-pl-sv",
460
+ "Helsinki-NLP/opus-mt-pl-no",
461
+ "Helsinki-NLP/opus-mt-pl-lt",
462
+ "Helsinki-NLP/opus-mt-pl-fr",
463
+ "Helsinki-NLP/opus-mt-pl-es",
464
+ "Helsinki-NLP/opus-mt-pl-eo",
465
+ "Helsinki-NLP/opus-mt-pl-en",
466
+ "Helsinki-NLP/opus-mt-pl-de",
467
+ "Helsinki-NLP/opus-mt-pl-ar",
468
+ "Helsinki-NLP/opus-mt-pis-sv",
469
+ "Helsinki-NLP/opus-mt-pis-fr",
470
+ "Helsinki-NLP/opus-mt-pis-fi",
471
+ "Helsinki-NLP/opus-mt-pis-es",
472
+ "Helsinki-NLP/opus-mt-pis-en",
473
+ "Helsinki-NLP/opus-mt-phi-en",
474
+ "Helsinki-NLP/opus-mt-pap-fr",
475
+ "Helsinki-NLP/opus-mt-pap-fi",
476
+ "Helsinki-NLP/opus-mt-pap-es",
477
+ "Helsinki-NLP/opus-mt-pap-en",
478
+ "Helsinki-NLP/opus-mt-pap-de",
479
+ "Helsinki-NLP/opus-mt-pag-sv",
480
+ "Helsinki-NLP/opus-mt-pag-fi",
481
+ "Helsinki-NLP/opus-mt-pag-es",
482
+ "Helsinki-NLP/opus-mt-pag-en",
483
+ "Helsinki-NLP/opus-mt-pag-de",
484
+ "Helsinki-NLP/opus-mt-pa-en",
485
+ "Helsinki-NLP/opus-mt-om-en",
486
+ "Helsinki-NLP/opus-mt-nyk-en",
487
+ "Helsinki-NLP/opus-mt-ny-es",
488
+ "Helsinki-NLP/opus-mt-ny-en",
489
+ "Helsinki-NLP/opus-mt-ny-de",
490
+ "Helsinki-NLP/opus-mt-nso-sv",
491
+ "Helsinki-NLP/opus-mt-nso-fr",
492
+ "Helsinki-NLP/opus-mt-nso-fi",
493
+ "Helsinki-NLP/opus-mt-nso-es",
494
+ "Helsinki-NLP/opus-mt-nso-en",
495
+ "Helsinki-NLP/opus-mt-nso-de",
496
+ "Helsinki-NLP/opus-mt-no-uk",
497
+ "Helsinki-NLP/opus-mt-no-sv",
498
+ "Helsinki-NLP/opus-mt-no-ru",
499
+ "Helsinki-NLP/opus-mt-no-pl",
500
+ "Helsinki-NLP/opus-mt-no-no",
501
+ "Helsinki-NLP/opus-mt-no-nl",
502
+ "Helsinki-NLP/opus-mt-no-fr",
503
+ "Helsinki-NLP/opus-mt-no-fi",
504
+ "Helsinki-NLP/opus-mt-no-es",
505
+ "Helsinki-NLP/opus-mt-no-de",
506
+ "Helsinki-NLP/opus-mt-no-da",
507
+ "Helsinki-NLP/opus-mt-nl-uk",
508
+ "Helsinki-NLP/opus-mt-nl-sv",
509
+ "Helsinki-NLP/opus-mt-nl-no",
510
+ "Helsinki-NLP/opus-mt-nl-fr",
511
+ "Helsinki-NLP/opus-mt-nl-fi",
512
+ "Helsinki-NLP/opus-mt-nl-es",
513
+ "Helsinki-NLP/opus-mt-nl-eo",
514
+ "Helsinki-NLP/opus-mt-nl-en",
515
+ "Helsinki-NLP/opus-mt-nl-ca",
516
+ "Helsinki-NLP/opus-mt-nl-af",
517
+ "Helsinki-NLP/opus-mt-niu-sv",
518
+ "Helsinki-NLP/opus-mt-niu-fr",
519
+ "Helsinki-NLP/opus-mt-niu-fi",
520
+ "Helsinki-NLP/opus-mt-niu-es",
521
+ "Helsinki-NLP/opus-mt-niu-en",
522
+ "Helsinki-NLP/opus-mt-niu-de",
523
+ "Helsinki-NLP/opus-mt-nic-en",
524
+ "Helsinki-NLP/opus-mt-ng-en",
525
+ "Helsinki-NLP/opus-mt-mul-en",
526
+ "Helsinki-NLP/opus-mt-mt-sv",
527
+ "Helsinki-NLP/opus-mt-mt-fr",
528
+ "Helsinki-NLP/opus-mt-mt-fi",
529
+ "Helsinki-NLP/opus-mt-mt-es",
530
+ "Helsinki-NLP/opus-mt-mt-en",
531
+ "Helsinki-NLP/opus-mt-ms-ms",
532
+ "Helsinki-NLP/opus-mt-ms-it",
533
+ "Helsinki-NLP/opus-mt-ms-fr",
534
+ "Helsinki-NLP/opus-mt-ms-de",
535
+ "Helsinki-NLP/opus-mt-mr-en",
536
+ "Helsinki-NLP/opus-mt-mos-en",
537
+ "Helsinki-NLP/opus-mt-ml-en",
538
+ "Helsinki-NLP/opus-mt-mkh-en",
539
+ "Helsinki-NLP/opus-mt-mk-fr",
540
+ "Helsinki-NLP/opus-mt-mk-fi",
541
+ "Helsinki-NLP/opus-mt-mk-es",
542
+ "Helsinki-NLP/opus-mt-mk-en",
543
+ "Helsinki-NLP/opus-mt-mh-fi",
544
+ "Helsinki-NLP/opus-mt-mh-es",
545
+ "Helsinki-NLP/opus-mt-mh-en",
546
+ "Helsinki-NLP/opus-mt-mg-es",
547
+ "Helsinki-NLP/opus-mt-mg-en",
548
+ "Helsinki-NLP/opus-mt-mfs-es",
549
+ "Helsinki-NLP/opus-mt-mfe-es",
550
+ "Helsinki-NLP/opus-mt-mfe-en",
551
+ "Helsinki-NLP/opus-mt-lv-sv",
552
+ "Helsinki-NLP/opus-mt-lv-ru",
553
+ "Helsinki-NLP/opus-mt-lv-fr",
554
+ "Helsinki-NLP/opus-mt-lv-fi",
555
+ "Helsinki-NLP/opus-mt-lv-es",
556
+ "Helsinki-NLP/opus-mt-lv-en",
557
+ "Helsinki-NLP/opus-mt-lus-sv",
558
+ "Helsinki-NLP/opus-mt-lus-fr",
559
+ "Helsinki-NLP/opus-mt-lus-fi",
560
+ "Helsinki-NLP/opus-mt-lus-es",
561
+ "Helsinki-NLP/opus-mt-lus-en",
562
+ "Helsinki-NLP/opus-mt-luo-en",
563
+ "Helsinki-NLP/opus-mt-lun-en",
564
+ "Helsinki-NLP/opus-mt-lue-sv",
565
+ "Helsinki-NLP/opus-mt-lue-fr",
566
+ "Helsinki-NLP/opus-mt-lue-fi",
567
+ "Helsinki-NLP/opus-mt-lue-es",
568
+ "Helsinki-NLP/opus-mt-lue-en",
569
+ "Helsinki-NLP/opus-mt-lua-sv",
570
+ "Helsinki-NLP/opus-mt-lua-fr",
571
+ "Helsinki-NLP/opus-mt-lua-fi",
572
+ "Helsinki-NLP/opus-mt-lua-es",
573
+ "Helsinki-NLP/opus-mt-lua-en",
574
+ "Helsinki-NLP/opus-mt-lu-sv",
575
+ "Helsinki-NLP/opus-mt-lu-fr",
576
+ "Helsinki-NLP/opus-mt-lu-fi",
577
+ "Helsinki-NLP/opus-mt-lu-es",
578
+ "Helsinki-NLP/opus-mt-lu-en",
579
+ "Helsinki-NLP/opus-mt-lt-tr",
580
+ "Helsinki-NLP/opus-mt-lt-sv",
581
+ "Helsinki-NLP/opus-mt-lt-ru",
582
+ "Helsinki-NLP/opus-mt-lt-pl",
583
+ "Helsinki-NLP/opus-mt-lt-it",
584
+ "Helsinki-NLP/opus-mt-lt-fr",
585
+ "Helsinki-NLP/opus-mt-lt-es",
586
+ "Helsinki-NLP/opus-mt-lt-eo",
587
+ "Helsinki-NLP/opus-mt-lt-de",
588
+ "Helsinki-NLP/opus-mt-loz-sv",
589
+ "Helsinki-NLP/opus-mt-loz-fr",
590
+ "Helsinki-NLP/opus-mt-loz-fi",
591
+ "Helsinki-NLP/opus-mt-loz-es",
592
+ "Helsinki-NLP/opus-mt-loz-en",
593
+ "Helsinki-NLP/opus-mt-loz-de",
594
+ "Helsinki-NLP/opus-mt-ln-fr",
595
+ "Helsinki-NLP/opus-mt-ln-es",
596
+ "Helsinki-NLP/opus-mt-ln-en",
597
+ "Helsinki-NLP/opus-mt-ln-de",
598
+ "Helsinki-NLP/opus-mt-lg-sv",
599
+ "Helsinki-NLP/opus-mt-lg-fr",
600
+ "Helsinki-NLP/opus-mt-lg-fi",
601
+ "Helsinki-NLP/opus-mt-lg-es",
602
+ "Helsinki-NLP/opus-mt-lg-en",
603
+ "Helsinki-NLP/opus-mt-kwy-sv",
604
+ "Helsinki-NLP/opus-mt-kwy-fr",
605
+ "Helsinki-NLP/opus-mt-kwy-en",
606
+ "Helsinki-NLP/opus-mt-kwn-en",
607
+ "Helsinki-NLP/opus-mt-kqn-sv",
608
+ "Helsinki-NLP/opus-mt-kqn-fr",
609
+ "Helsinki-NLP/opus-mt-kqn-es",
610
+ "Helsinki-NLP/opus-mt-kqn-en",
611
+ "Helsinki-NLP/opus-mt-ko-sv",
612
+ "Helsinki-NLP/opus-mt-ko-ru",
613
+ "Helsinki-NLP/opus-mt-ko-hu",
614
+ "Helsinki-NLP/opus-mt-ko-fr",
615
+ "Helsinki-NLP/opus-mt-ko-fi",
616
+ "Helsinki-NLP/opus-mt-ko-es",
617
+ "Helsinki-NLP/opus-mt-ko-en",
618
+ "Helsinki-NLP/opus-mt-ko-de",
619
+ "Helsinki-NLP/opus-mt-kl-en",
620
+ "Helsinki-NLP/opus-mt-kj-en",
621
+ "Helsinki-NLP/opus-mt-kg-sv",
622
+ "Helsinki-NLP/opus-mt-kg-fr",
623
+ "Helsinki-NLP/opus-mt-kg-es",
624
+ "Helsinki-NLP/opus-mt-kg-en",
625
+ "Helsinki-NLP/opus-mt-kab-en",
626
+ "Helsinki-NLP/opus-mt-ka-ru",
627
+ "Helsinki-NLP/opus-mt-ka-en",
628
+ "Helsinki-NLP/opus-mt-jap-en",
629
+ "Helsinki-NLP/opus-mt-ja-vi",
630
+ "Helsinki-NLP/opus-mt-ja-tr",
631
+ "Helsinki-NLP/opus-mt-ja-sv",
632
+ "Helsinki-NLP/opus-mt-ja-sh",
633
+ "Helsinki-NLP/opus-mt-ja-ru",
634
+ "Helsinki-NLP/opus-mt-ja-pt",
635
+ "Helsinki-NLP/opus-mt-ja-pl",
636
+ "Helsinki-NLP/opus-mt-ja-nl",
637
+ "Helsinki-NLP/opus-mt-ja-ms",
638
+ "Helsinki-NLP/opus-mt-ja-it",
639
+ "Helsinki-NLP/opus-mt-ja-hu",
640
+ "Helsinki-NLP/opus-mt-ja-he",
641
+ "Helsinki-NLP/opus-mt-ja-fr",
642
+ "Helsinki-NLP/opus-mt-ja-fi",
643
+ "Helsinki-NLP/opus-mt-ja-es",
644
+ "Helsinki-NLP/opus-mt-ja-en",
645
+ "Helsinki-NLP/opus-mt-ja-de",
646
+ "Helsinki-NLP/opus-mt-ja-da",
647
+ "Helsinki-NLP/opus-mt-ja-bg",
648
+ "Helsinki-NLP/opus-mt-ja-ar",
649
+ "Helsinki-NLP/opus-mt-itc-itc",
650
+ "Helsinki-NLP/opus-mt-itc-en",
651
+ "Helsinki-NLP/opus-mt-it-vi",
652
+ "Helsinki-NLP/opus-mt-it-uk",
653
+ "Helsinki-NLP/opus-mt-it-sv",
654
+ "Helsinki-NLP/opus-mt-it-ms",
655
+ "Helsinki-NLP/opus-mt-it-lt",
656
+ "Helsinki-NLP/opus-mt-it-is",
657
+ "Helsinki-NLP/opus-mt-it-fr",
658
+ "Helsinki-NLP/opus-mt-it-es",
659
+ "Helsinki-NLP/opus-mt-it-eo",
660
+ "Helsinki-NLP/opus-mt-it-en",
661
+ "Helsinki-NLP/opus-mt-it-de",
662
+ "Helsinki-NLP/opus-mt-it-ca",
663
+ "Helsinki-NLP/opus-mt-it-bg",
664
+ "Helsinki-NLP/opus-mt-it-ar",
665
+ "Helsinki-NLP/opus-mt-iso-sv",
666
+ "Helsinki-NLP/opus-mt-iso-fr",
667
+ "Helsinki-NLP/opus-mt-iso-fi",
668
+ "Helsinki-NLP/opus-mt-iso-es",
669
+ "Helsinki-NLP/opus-mt-iso-en",
670
+ "Helsinki-NLP/opus-mt-is-sv",
671
+ "Helsinki-NLP/opus-mt-is-it",
672
+ "Helsinki-NLP/opus-mt-is-fr",
673
+ "Helsinki-NLP/opus-mt-is-fi",
674
+ "Helsinki-NLP/opus-mt-is-es",
675
+ "Helsinki-NLP/opus-mt-is-eo",
676
+ "Helsinki-NLP/opus-mt-is-en",
677
+ "Helsinki-NLP/opus-mt-is-de",
678
+ "Helsinki-NLP/opus-mt-ine-ine",
679
+ "Helsinki-NLP/opus-mt-ine-en",
680
+ "Helsinki-NLP/opus-mt-inc-inc",
681
+ "Helsinki-NLP/opus-mt-inc-en",
682
+ "Helsinki-NLP/opus-mt-ilo-sv",
683
+ "Helsinki-NLP/opus-mt-ilo-fi",
684
+ "Helsinki-NLP/opus-mt-ilo-es",
685
+ "Helsinki-NLP/opus-mt-ilo-en",
686
+ "Helsinki-NLP/opus-mt-ilo-de",
687
+ "Helsinki-NLP/opus-mt-iir-iir",
688
+ "Helsinki-NLP/opus-mt-iir-en",
689
+ "Helsinki-NLP/opus-mt-ig-sv",
690
+ "Helsinki-NLP/opus-mt-ig-fr",
691
+ "Helsinki-NLP/opus-mt-ig-fi",
692
+ "Helsinki-NLP/opus-mt-ig-es",
693
+ "Helsinki-NLP/opus-mt-ig-en",
694
+ "Helsinki-NLP/opus-mt-ig-de",
695
+ "Helsinki-NLP/opus-mt-id-sv",
696
+ "Helsinki-NLP/opus-mt-id-fr",
697
+ "Helsinki-NLP/opus-mt-id-fi",
698
+ "Helsinki-NLP/opus-mt-id-es",
699
+ "Helsinki-NLP/opus-mt-id-en",
700
+ "Helsinki-NLP/opus-mt-hy-ru",
701
+ "Helsinki-NLP/opus-mt-hy-en",
702
+ "Helsinki-NLP/opus-mt-hu-uk",
703
+ "Helsinki-NLP/opus-mt-hu-sv",
704
+ "Helsinki-NLP/opus-mt-hu-fr",
705
+ "Helsinki-NLP/opus-mt-hu-fi",
706
+ "Helsinki-NLP/opus-mt-hu-eo",
707
+ "Helsinki-NLP/opus-mt-hu-en",
708
+ "Helsinki-NLP/opus-mt-hu-de",
709
+ "Helsinki-NLP/opus-mt-ht-sv",
710
+ "Helsinki-NLP/opus-mt-ht-fr",
711
+ "Helsinki-NLP/opus-mt-ht-fi",
712
+ "Helsinki-NLP/opus-mt-ht-es",
713
+ "Helsinki-NLP/opus-mt-ht-en",
714
+ "Helsinki-NLP/opus-mt-hr-sv",
715
+ "Helsinki-NLP/opus-mt-hr-fr",
716
+ "Helsinki-NLP/opus-mt-hr-fi",
717
+ "Helsinki-NLP/opus-mt-hr-es",
718
+ "Helsinki-NLP/opus-mt-ho-en",
719
+ "Helsinki-NLP/opus-mt-hil-fi",
720
+ "Helsinki-NLP/opus-mt-hil-en",
721
+ "Helsinki-NLP/opus-mt-hil-de",
722
+ "Helsinki-NLP/opus-mt-hi-ur",
723
+ "Helsinki-NLP/opus-mt-hi-en",
724
+ "Helsinki-NLP/opus-mt-he-uk",
725
+ "Helsinki-NLP/opus-mt-he-sv",
726
+ "Helsinki-NLP/opus-mt-he-ru",
727
+ "Helsinki-NLP/opus-mt-he-it",
728
+ "Helsinki-NLP/opus-mt-he-fi",
729
+ "Helsinki-NLP/opus-mt-he-es",
730
+ "Helsinki-NLP/opus-mt-he-eo",
731
+ "Helsinki-NLP/opus-mt-he-de",
732
+ "Helsinki-NLP/opus-mt-he-ar",
733
+ "Helsinki-NLP/opus-mt-ha-sv",
734
+ "Helsinki-NLP/opus-mt-ha-fr",
735
+ "Helsinki-NLP/opus-mt-ha-fi",
736
+ "Helsinki-NLP/opus-mt-ha-es",
737
+ "Helsinki-NLP/opus-mt-ha-en",
738
+ "Helsinki-NLP/opus-mt-gv-en",
739
+ "Helsinki-NLP/opus-mt-guw-sv",
740
+ "Helsinki-NLP/opus-mt-guw-fr",
741
+ "Helsinki-NLP/opus-mt-guw-fi",
742
+ "Helsinki-NLP/opus-mt-guw-es",
743
+ "Helsinki-NLP/opus-mt-guw-en",
744
+ "Helsinki-NLP/opus-mt-guw-de",
745
+ "Helsinki-NLP/opus-mt-grk-en",
746
+ "Helsinki-NLP/opus-mt-gmw-gmw",
747
+ "Helsinki-NLP/opus-mt-gmw-en",
748
+ "Helsinki-NLP/opus-mt-gmq-gmq",
749
+ "Helsinki-NLP/opus-mt-gmq-en",
750
+ "Helsinki-NLP/opus-mt-gl-pt",
751
+ "Helsinki-NLP/opus-mt-gl-es",
752
+ "Helsinki-NLP/opus-mt-gl-en",
753
+ "Helsinki-NLP/opus-mt-gil-sv",
754
+ "Helsinki-NLP/opus-mt-gil-fr",
755
+ "Helsinki-NLP/opus-mt-gil-fi",
756
+ "Helsinki-NLP/opus-mt-gil-es",
757
+ "Helsinki-NLP/opus-mt-gil-en",
758
+ "Helsinki-NLP/opus-mt-gem-gem",
759
+ "Helsinki-NLP/opus-mt-gem-en",
760
+ "Helsinki-NLP/opus-mt-gaa-sv",
761
+ "Helsinki-NLP/opus-mt-gaa-fr",
762
+ "Helsinki-NLP/opus-mt-gaa-fi",
763
+ "Helsinki-NLP/opus-mt-gaa-es",
764
+ "Helsinki-NLP/opus-mt-gaa-en",
765
+ "Helsinki-NLP/opus-mt-gaa-de",
766
+ "Helsinki-NLP/opus-mt-ga-en",
767
+ "Helsinki-NLP/opus-mt-fse-fi",
768
+ "Helsinki-NLP/opus-mt-fr-zne",
769
+ "Helsinki-NLP/opus-mt-fr-yo",
770
+ "Helsinki-NLP/opus-mt-fr-yap",
771
+ "Helsinki-NLP/opus-mt-fr-xh",
772
+ "Helsinki-NLP/opus-mt-fr-wls",
773
+ "Helsinki-NLP/opus-mt-fr-war",
774
+ "Helsinki-NLP/opus-mt-fr-vi",
775
+ "Helsinki-NLP/opus-mt-fr-ve",
776
+ "Helsinki-NLP/opus-mt-fr-uk",
777
+ "Helsinki-NLP/opus-mt-fr-ty",
778
+ "Helsinki-NLP/opus-mt-fr-tw",
779
+ "Helsinki-NLP/opus-mt-fr-tvl",
780
+ "Helsinki-NLP/opus-mt-fr-tum",
781
+ "Helsinki-NLP/opus-mt-fr-ts",
782
+ "Helsinki-NLP/opus-mt-fr-tpi",
783
+ "Helsinki-NLP/opus-mt-fr-to",
784
+ "Helsinki-NLP/opus-mt-fr-tn",
785
+ "Helsinki-NLP/opus-mt-fr-tll",
786
+ "Helsinki-NLP/opus-mt-fr-tl",
787
+ "Helsinki-NLP/opus-mt-fr-tiv",
788
+ "Helsinki-NLP/opus-mt-fr-swc",
789
+ "Helsinki-NLP/opus-mt-fr-sv",
790
+ "Helsinki-NLP/opus-mt-fr-st",
791
+ "Helsinki-NLP/opus-mt-fr-srn",
792
+ "Helsinki-NLP/opus-mt-fr-sn",
793
+ "Helsinki-NLP/opus-mt-fr-sm",
794
+ "Helsinki-NLP/opus-mt-fr-sl",
795
+ "Helsinki-NLP/opus-mt-fr-sk",
796
+ "Helsinki-NLP/opus-mt-fr-sg",
797
+ "Helsinki-NLP/opus-mt-fr-rw",
798
+ "Helsinki-NLP/opus-mt-fr-run",
799
+ "Helsinki-NLP/opus-mt-fr-ru",
800
+ "Helsinki-NLP/opus-mt-fr-ro",
801
+ "Helsinki-NLP/opus-mt-fr-rnd",
802
+ "Helsinki-NLP/opus-mt-fr-pon",
803
+ "Helsinki-NLP/opus-mt-fr-pl",
804
+ "Helsinki-NLP/opus-mt-fr-pis",
805
+ "Helsinki-NLP/opus-mt-fr-pap",
806
+ "Helsinki-NLP/opus-mt-fr-pag",
807
+ "Helsinki-NLP/opus-mt-fr-ny",
808
+ "Helsinki-NLP/opus-mt-fr-nso",
809
+ "Helsinki-NLP/opus-mt-fr-no",
810
+ "Helsinki-NLP/opus-mt-fr-niu",
811
+ "Helsinki-NLP/opus-mt-fr-mt",
812
+ "Helsinki-NLP/opus-mt-fr-ms",
813
+ "Helsinki-NLP/opus-mt-fr-mos",
814
+ "Helsinki-NLP/opus-mt-fr-mh",
815
+ "Helsinki-NLP/opus-mt-fr-mfe",
816
+ "Helsinki-NLP/opus-mt-fr-lus",
817
+ "Helsinki-NLP/opus-mt-fr-lue",
818
+ "Helsinki-NLP/opus-mt-fr-lua",
819
+ "Helsinki-NLP/opus-mt-fr-lu",
820
+ "Helsinki-NLP/opus-mt-fr-loz",
821
+ "Helsinki-NLP/opus-mt-fr-ln",
822
+ "Helsinki-NLP/opus-mt-fr-lg",
823
+ "Helsinki-NLP/opus-mt-fr-kwy",
824
+ "Helsinki-NLP/opus-mt-fr-kqn",
825
+ "Helsinki-NLP/opus-mt-fr-kg",
826
+ "Helsinki-NLP/opus-mt-fr-iso",
827
+ "Helsinki-NLP/opus-mt-fr-ilo",
828
+ "Helsinki-NLP/opus-mt-fr-ig",
829
+ "Helsinki-NLP/opus-mt-fr-id",
830
+ "Helsinki-NLP/opus-mt-fr-hu",
831
+ "Helsinki-NLP/opus-mt-fr-ht",
832
+ "Helsinki-NLP/opus-mt-fr-hr",
833
+ "Helsinki-NLP/opus-mt-fr-ho",
834
+ "Helsinki-NLP/opus-mt-fr-hil",
835
+ "Helsinki-NLP/opus-mt-fr-he",
836
+ "Helsinki-NLP/opus-mt-fr-ha",
837
+ "Helsinki-NLP/opus-mt-fr-guw",
838
+ "Helsinki-NLP/opus-mt-fr-gil",
839
+ "Helsinki-NLP/opus-mt-fr-gaa",
840
+ "Helsinki-NLP/opus-mt-fr-fj",
841
+ "Helsinki-NLP/opus-mt-fr-es",
842
+ "Helsinki-NLP/opus-mt-fr-eo",
843
+ "Helsinki-NLP/opus-mt-fr-en",
844
+ "Helsinki-NLP/opus-mt-fr-el",
845
+ "Helsinki-NLP/opus-mt-fr-efi",
846
+ "Helsinki-NLP/opus-mt-fr-ee",
847
+ "Helsinki-NLP/opus-mt-fr-de",
848
+ "Helsinki-NLP/opus-mt-fr-crs",
849
+ "Helsinki-NLP/opus-mt-fr-ceb",
850
+ "Helsinki-NLP/opus-mt-fr-ca",
851
+ "Helsinki-NLP/opus-mt-fr-bzs",
852
+ "Helsinki-NLP/opus-mt-fr-bi",
853
+ "Helsinki-NLP/opus-mt-fr-bg",
854
+ "Helsinki-NLP/opus-mt-fr-ber",
855
+ "Helsinki-NLP/opus-mt-fr-bem",
856
+ "Helsinki-NLP/opus-mt-fr-bcl",
857
+ "Helsinki-NLP/opus-mt-fr-ase",
858
+ "Helsinki-NLP/opus-mt-fr-ar",
859
+ "Helsinki-NLP/opus-mt-fr-af",
860
+ "Helsinki-NLP/opus-mt-fj-fr",
861
+ "Helsinki-NLP/opus-mt-fj-en",
862
+ "Helsinki-NLP/opus-mt-fiu-fiu",
863
+ "Helsinki-NLP/opus-mt-fiu-en",
864
+ "Helsinki-NLP/opus-mt-fi_nb_no_nn_ru_sv_en-SAMI",
865
+ "Helsinki-NLP/opus-mt-fi-zne",
866
+ "Helsinki-NLP/opus-mt-fi-yo",
867
+ "Helsinki-NLP/opus-mt-fi-yap",
868
+ "Helsinki-NLP/opus-mt-fi-xh",
869
+ "Helsinki-NLP/opus-mt-fi-wls",
870
+ "Helsinki-NLP/opus-mt-fi-war",
871
+ "Helsinki-NLP/opus-mt-fi-ve",
872
+ "Helsinki-NLP/opus-mt-fi-uk",
873
+ "Helsinki-NLP/opus-mt-fi-ty",
874
+ "Helsinki-NLP/opus-mt-fi-tw",
875
+ "Helsinki-NLP/opus-mt-fi-tvl",
876
+ "Helsinki-NLP/opus-mt-fi-ts",
877
+ "Helsinki-NLP/opus-mt-fi-tr",
878
+ "Helsinki-NLP/opus-mt-fi-tpi",
879
+ "Helsinki-NLP/opus-mt-fi-toi",
880
+ "Helsinki-NLP/opus-mt-fi-to",
881
+ "Helsinki-NLP/opus-mt-fi-tn",
882
+ "Helsinki-NLP/opus-mt-fi-tll",
883
+ "Helsinki-NLP/opus-mt-fi-tiv",
884
+ "Helsinki-NLP/opus-mt-fi-swc",
885
+ "Helsinki-NLP/opus-mt-fi-sw",
886
+ "Helsinki-NLP/opus-mt-fi-sv",
887
+ "Helsinki-NLP/opus-mt-fi-st",
888
+ "Helsinki-NLP/opus-mt-fi-srn",
889
+ "Helsinki-NLP/opus-mt-fi-sq",
890
+ "Helsinki-NLP/opus-mt-fi-sn",
891
+ "Helsinki-NLP/opus-mt-fi-sm",
892
+ "Helsinki-NLP/opus-mt-fi-sl",
893
+ "Helsinki-NLP/opus-mt-fi-sk",
894
+ "Helsinki-NLP/opus-mt-fi-sg",
895
+ "Helsinki-NLP/opus-mt-fi-rw",
896
+ "Helsinki-NLP/opus-mt-fi-run",
897
+ "Helsinki-NLP/opus-mt-fi-ru",
898
+ "Helsinki-NLP/opus-mt-fi-ro",
899
+ "Helsinki-NLP/opus-mt-fi-pon",
900
+ "Helsinki-NLP/opus-mt-fi-pis",
901
+ "Helsinki-NLP/opus-mt-fi-pap",
902
+ "Helsinki-NLP/opus-mt-fi-pag",
903
+ "Helsinki-NLP/opus-mt-fi-ny",
904
+ "Helsinki-NLP/opus-mt-fi-nso",
905
+ "Helsinki-NLP/opus-mt-fi-no",
906
+ "Helsinki-NLP/opus-mt-fi-nl",
907
+ "Helsinki-NLP/opus-mt-fi-niu",
908
+ "Helsinki-NLP/opus-mt-fi-mt",
909
+ "Helsinki-NLP/opus-mt-fi-mos",
910
+ "Helsinki-NLP/opus-mt-fi-mk",
911
+ "Helsinki-NLP/opus-mt-fi-mh",
912
+ "Helsinki-NLP/opus-mt-fi-mg",
913
+ "Helsinki-NLP/opus-mt-fi-mfe",
914
+ "Helsinki-NLP/opus-mt-fi-lv",
915
+ "Helsinki-NLP/opus-mt-fi-lus",
916
+ "Helsinki-NLP/opus-mt-fi-lue",
917
+ "Helsinki-NLP/opus-mt-fi-lua",
918
+ "Helsinki-NLP/opus-mt-fi-lu",
919
+ "Helsinki-NLP/opus-mt-fi-ln",
920
+ "Helsinki-NLP/opus-mt-fi-lg",
921
+ "Helsinki-NLP/opus-mt-fi-kqn",
922
+ "Helsinki-NLP/opus-mt-fi-kg",
923
+ "Helsinki-NLP/opus-mt-fi-it",
924
+ "Helsinki-NLP/opus-mt-fi-iso",
925
+ "Helsinki-NLP/opus-mt-fi-is",
926
+ "Helsinki-NLP/opus-mt-fi-ilo",
927
+ "Helsinki-NLP/opus-mt-fi-ig",
928
+ "Helsinki-NLP/opus-mt-fi-id",
929
+ "Helsinki-NLP/opus-mt-fi-hu",
930
+ "Helsinki-NLP/opus-mt-fi-ht",
931
+ "Helsinki-NLP/opus-mt-fi-hr",
932
+ "Helsinki-NLP/opus-mt-fi-ho",
933
+ "Helsinki-NLP/opus-mt-fi-hil",
934
+ "Helsinki-NLP/opus-mt-fi-he",
935
+ "Helsinki-NLP/opus-mt-fi-ha",
936
+ "Helsinki-NLP/opus-mt-fi-guw",
937
+ "Helsinki-NLP/opus-mt-fi-gil",
938
+ "Helsinki-NLP/opus-mt-fi-gaa",
939
+ "Helsinki-NLP/opus-mt-fi-fse",
940
+ "Helsinki-NLP/opus-mt-fi-fr",
941
+ "Helsinki-NLP/opus-mt-fi-fj",
942
+ "Helsinki-NLP/opus-mt-fi-fi",
943
+ "Helsinki-NLP/opus-mt-fi-et",
944
+ "Helsinki-NLP/opus-mt-fi-es",
945
+ "Helsinki-NLP/opus-mt-fi-eo",
946
+ "Helsinki-NLP/opus-mt-fi-en",
947
+ "Helsinki-NLP/opus-mt-fi-el",
948
+ "Helsinki-NLP/opus-mt-fi-efi",
949
+ "Helsinki-NLP/opus-mt-fi-ee",
950
+ "Helsinki-NLP/opus-mt-fi-de",
951
+ "Helsinki-NLP/opus-mt-fi-cs",
952
+ "Helsinki-NLP/opus-mt-fi-crs",
953
+ "Helsinki-NLP/opus-mt-fi-ceb",
954
+ "Helsinki-NLP/opus-mt-fi-bzs",
955
+ "Helsinki-NLP/opus-mt-fi-bg",
956
+ "Helsinki-NLP/opus-mt-fi-bem",
957
+ "Helsinki-NLP/opus-mt-fi-bcl",
958
+ "Helsinki-NLP/opus-mt-fi-af",
959
+ "Helsinki-NLP/opus-mt-fi-ZH",
960
+ "Helsinki-NLP/opus-mt-fi-NORWAY",
961
+ "Helsinki-NLP/opus-mt-euq-en",
962
+ "Helsinki-NLP/opus-mt-eu-ru",
963
+ "Helsinki-NLP/opus-mt-eu-es",
964
+ "Helsinki-NLP/opus-mt-eu-en",
965
+ "Helsinki-NLP/opus-mt-eu-de",
966
+ "Helsinki-NLP/opus-mt-et-sv",
967
+ "Helsinki-NLP/opus-mt-et-ru",
968
+ "Helsinki-NLP/opus-mt-et-fr",
969
+ "Helsinki-NLP/opus-mt-et-fi",
970
+ "Helsinki-NLP/opus-mt-et-es",
971
+ "Helsinki-NLP/opus-mt-et-en",
972
+ "Helsinki-NLP/opus-mt-et-de",
973
+ "Helsinki-NLP/opus-mt-es-zai",
974
+ "Helsinki-NLP/opus-mt-es-yua",
975
+ "Helsinki-NLP/opus-mt-es-yo",
976
+ "Helsinki-NLP/opus-mt-es-xh",
977
+ "Helsinki-NLP/opus-mt-es-wls",
978
+ "Helsinki-NLP/opus-mt-es-war",
979
+ "Helsinki-NLP/opus-mt-es-vi",
980
+ "Helsinki-NLP/opus-mt-es-ve",
981
+ "Helsinki-NLP/opus-mt-es-uk",
982
+ "Helsinki-NLP/opus-mt-es-tzo",
983
+ "Helsinki-NLP/opus-mt-es-ty",
984
+ "Helsinki-NLP/opus-mt-es-tw",
985
+ "Helsinki-NLP/opus-mt-es-tvl",
986
+ "Helsinki-NLP/opus-mt-es-tpi",
987
+ "Helsinki-NLP/opus-mt-es-to",
988
+ "Helsinki-NLP/opus-mt-es-tn",
989
+ "Helsinki-NLP/opus-mt-es-tll",
990
+ "Helsinki-NLP/opus-mt-es-tl",
991
+ "Helsinki-NLP/opus-mt-es-swc",
992
+ "Helsinki-NLP/opus-mt-es-st",
993
+ "Helsinki-NLP/opus-mt-es-srn",
994
+ "Helsinki-NLP/opus-mt-es-sn",
995
+ "Helsinki-NLP/opus-mt-es-sm",
996
+ "Helsinki-NLP/opus-mt-es-sl",
997
+ "Helsinki-NLP/opus-mt-es-sg",
998
+ "Helsinki-NLP/opus-mt-es-rw",
999
+ "Helsinki-NLP/opus-mt-es-ru",
1000
+ "Helsinki-NLP/opus-mt-es-ro",
1001
+ "Helsinki-NLP/opus-mt-es-rn",
1002
+ "Helsinki-NLP/opus-mt-es-prl",
1003
+ "Helsinki-NLP/opus-mt-es-pon",
1004
+ "Helsinki-NLP/opus-mt-es-pl",
1005
+ "Helsinki-NLP/opus-mt-es-pis",
1006
+ "Helsinki-NLP/opus-mt-es-pap",
1007
+ "Helsinki-NLP/opus-mt-es-pag",
1008
+ "Helsinki-NLP/opus-mt-es-ny",
1009
+ "Helsinki-NLP/opus-mt-es-nso",
1010
+ "Helsinki-NLP/opus-mt-es-no",
1011
+ "Helsinki-NLP/opus-mt-es-nl",
1012
+ "Helsinki-NLP/opus-mt-es-niu",
1013
+ "Helsinki-NLP/opus-mt-es-mt",
1014
+ "Helsinki-NLP/opus-mt-es-mk",
1015
+ "Helsinki-NLP/opus-mt-es-mfs",
1016
+ "Helsinki-NLP/opus-mt-es-lus",
1017
+ "Helsinki-NLP/opus-mt-es-lua",
1018
+ "Helsinki-NLP/opus-mt-es-lt",
1019
+ "Helsinki-NLP/opus-mt-es-loz",
1020
+ "Helsinki-NLP/opus-mt-es-ln",
1021
+ "Helsinki-NLP/opus-mt-es-kg",
1022
+ "Helsinki-NLP/opus-mt-es-it",
1023
+ "Helsinki-NLP/opus-mt-es-iso",
1024
+ "Helsinki-NLP/opus-mt-es-is",
1025
+ "Helsinki-NLP/opus-mt-es-ilo",
1026
+ "Helsinki-NLP/opus-mt-es-ig",
1027
+ "Helsinki-NLP/opus-mt-es-id",
1028
+ "Helsinki-NLP/opus-mt-es-ht",
1029
+ "Helsinki-NLP/opus-mt-es-hr",
1030
+ "Helsinki-NLP/opus-mt-es-ho",
1031
+ "Helsinki-NLP/opus-mt-es-hil",
1032
+ "Helsinki-NLP/opus-mt-es-he",
1033
+ "Helsinki-NLP/opus-mt-es-ha",
1034
+ "Helsinki-NLP/opus-mt-es-guw",
1035
+ "Helsinki-NLP/opus-mt-es-gl",
1036
+ "Helsinki-NLP/opus-mt-es-gil",
1037
+ "Helsinki-NLP/opus-mt-es-gaa",
1038
+ "Helsinki-NLP/opus-mt-es-fr",
1039
+ "Helsinki-NLP/opus-mt-es-fj",
1040
+ "Helsinki-NLP/opus-mt-es-fi",
1041
+ "Helsinki-NLP/opus-mt-es-eu",
1042
+ "Helsinki-NLP/opus-mt-es-et",
1043
+ "Helsinki-NLP/opus-mt-es-es",
1044
+ "Helsinki-NLP/opus-mt-es-eo",
1045
+ "Helsinki-NLP/opus-mt-es-en",
1046
+ "Helsinki-NLP/opus-mt-es-el",
1047
+ "Helsinki-NLP/opus-mt-es-efi",
1048
+ "Helsinki-NLP/opus-mt-es-ee",
1049
+ "Helsinki-NLP/opus-mt-es-de",
1050
+ "Helsinki-NLP/opus-mt-es-da",
1051
+ "Helsinki-NLP/opus-mt-es-csn",
1052
+ "Helsinki-NLP/opus-mt-es-csg",
1053
+ "Helsinki-NLP/opus-mt-es-cs",
1054
+ "Helsinki-NLP/opus-mt-es-crs",
1055
+ "Helsinki-NLP/opus-mt-es-ceb",
1056
+ "Helsinki-NLP/opus-mt-es-ca",
1057
+ "Helsinki-NLP/opus-mt-es-bzs",
1058
+ "Helsinki-NLP/opus-mt-es-bi",
1059
+ "Helsinki-NLP/opus-mt-es-bg",
1060
+ "Helsinki-NLP/opus-mt-es-ber",
1061
+ "Helsinki-NLP/opus-mt-es-bcl",
1062
+ "Helsinki-NLP/opus-mt-es-ase",
1063
+ "Helsinki-NLP/opus-mt-es-ar",
1064
+ "Helsinki-NLP/opus-mt-es-af",
1065
+ "Helsinki-NLP/opus-mt-es-aed",
1066
+ "Helsinki-NLP/opus-mt-es-NORWAY",
1067
+ "Helsinki-NLP/opus-mt-eo-sv",
1068
+ "Helsinki-NLP/opus-mt-eo-sh",
1069
+ "Helsinki-NLP/opus-mt-eo-ru",
1070
+ "Helsinki-NLP/opus-mt-eo-ro",
1071
+ "Helsinki-NLP/opus-mt-eo-pt",
1072
+ "Helsinki-NLP/opus-mt-eo-pl",
1073
+ "Helsinki-NLP/opus-mt-eo-nl",
1074
+ "Helsinki-NLP/opus-mt-eo-it",
1075
+ "Helsinki-NLP/opus-mt-eo-hu",
1076
+ "Helsinki-NLP/opus-mt-eo-he",
1077
+ "Helsinki-NLP/opus-mt-eo-fr",
1078
+ "Helsinki-NLP/opus-mt-eo-fi",
1079
+ "Helsinki-NLP/opus-mt-eo-es",
1080
+ "Helsinki-NLP/opus-mt-eo-en",
1081
+ "Helsinki-NLP/opus-mt-eo-el",
1082
+ "Helsinki-NLP/opus-mt-eo-de",
1083
+ "Helsinki-NLP/opus-mt-eo-da",
1084
+ "Helsinki-NLP/opus-mt-eo-cs",
1085
+ "Helsinki-NLP/opus-mt-eo-bg",
1086
+ "Helsinki-NLP/opus-mt-eo-af",
1087
+ "Helsinki-NLP/opus-mt-en_el_es_fi-en_el_es_fi",
1088
+ "Helsinki-NLP/opus-mt-en-zlw",
1089
+ "Helsinki-NLP/opus-mt-en-zls",
1090
+ "Helsinki-NLP/opus-mt-en-zle",
1091
+ "Helsinki-NLP/opus-mt-en-zh",
1092
+ "Helsinki-NLP/opus-mt-en-xh",
1093
+ "Helsinki-NLP/opus-mt-en-vi",
1094
+ "Helsinki-NLP/opus-mt-en-urj",
1095
+ "Helsinki-NLP/opus-mt-en-ur",
1096
+ "Helsinki-NLP/opus-mt-en-umb",
1097
+ "Helsinki-NLP/opus-mt-en-uk",
1098
+ "Helsinki-NLP/opus-mt-en-ty",
1099
+ "Helsinki-NLP/opus-mt-en-tw",
1100
+ "Helsinki-NLP/opus-mt-en-tvl",
1101
+ "Helsinki-NLP/opus-mt-en-tut",
1102
+ "Helsinki-NLP/opus-mt-en-ts",
1103
+ "Helsinki-NLP/opus-mt-en-trk",
1104
+ "Helsinki-NLP/opus-mt-en-tpi",
1105
+ "Helsinki-NLP/opus-mt-en-toi",
1106
+ "Helsinki-NLP/opus-mt-en-to",
1107
+ "Helsinki-NLP/opus-mt-en-tn",
1108
+ "Helsinki-NLP/opus-mt-en-tll",
1109
+ "Helsinki-NLP/opus-mt-en-tl",
1110
+ "Helsinki-NLP/opus-mt-en-tiv",
1111
+ "Helsinki-NLP/opus-mt-en-ti",
1112
+ "Helsinki-NLP/opus-mt-en-tdt",
1113
+ "Helsinki-NLP/opus-mt-en-swc",
1114
+ "Helsinki-NLP/opus-mt-en-sw",
1115
+ "Helsinki-NLP/opus-mt-en-sv",
1116
+ "Helsinki-NLP/opus-mt-en-st",
1117
+ "Helsinki-NLP/opus-mt-en-ss",
1118
+ "Helsinki-NLP/opus-mt-en-sq",
1119
+ "Helsinki-NLP/opus-mt-en-sn",
1120
+ "Helsinki-NLP/opus-mt-en-sm",
1121
+ "Helsinki-NLP/opus-mt-en-sla",
1122
+ "Helsinki-NLP/opus-mt-en-sk",
1123
+ "Helsinki-NLP/opus-mt-en-sit",
1124
+ "Helsinki-NLP/opus-mt-en-sg",
1125
+ "Helsinki-NLP/opus-mt-en-sem",
1126
+ "Helsinki-NLP/opus-mt-en-sal",
1127
+ "Helsinki-NLP/opus-mt-en-rw",
1128
+ "Helsinki-NLP/opus-mt-en-run",
1129
+ "Helsinki-NLP/opus-mt-en-ru",
1130
+ "Helsinki-NLP/opus-mt-en-roa",
1131
+ "Helsinki-NLP/opus-mt-en-ro",
1132
+ "Helsinki-NLP/opus-mt-en-rnd",
1133
+ "Helsinki-NLP/opus-mt-en-rn",
1134
+ "Helsinki-NLP/opus-mt-en-pqw",
1135
+ "Helsinki-NLP/opus-mt-en-pqe",
1136
+ "Helsinki-NLP/opus-mt-en-poz",
1137
+ "Helsinki-NLP/opus-mt-en-pon",
1138
+ "Helsinki-NLP/opus-mt-en-pis",
1139
+ "Helsinki-NLP/opus-mt-en-phi",
1140
+ "Helsinki-NLP/opus-mt-en-pap",
1141
+ "Helsinki-NLP/opus-mt-en-pag",
1142
+ "Helsinki-NLP/opus-mt-en-om",
1143
+ "Helsinki-NLP/opus-mt-en-nyk",
1144
+ "Helsinki-NLP/opus-mt-en-ny",
1145
+ "Helsinki-NLP/opus-mt-en-nso",
1146
+ "Helsinki-NLP/opus-mt-en-nl",
1147
+ "Helsinki-NLP/opus-mt-en-niu",
1148
+ "Helsinki-NLP/opus-mt-en-nic",
1149
+ "Helsinki-NLP/opus-mt-en-ng",
1150
+ "Helsinki-NLP/opus-mt-en-mul",
1151
+ "Helsinki-NLP/opus-mt-en-mt",
1152
+ "Helsinki-NLP/opus-mt-en-mr",
1153
+ "Helsinki-NLP/opus-mt-en-mos",
1154
+ "Helsinki-NLP/opus-mt-en-ml",
1155
+ "Helsinki-NLP/opus-mt-en-mkh",
1156
+ "Helsinki-NLP/opus-mt-en-mk",
1157
+ "Helsinki-NLP/opus-mt-en-mh",
1158
+ "Helsinki-NLP/opus-mt-en-mg",
1159
+ "Helsinki-NLP/opus-mt-en-mfe",
1160
+ "Helsinki-NLP/opus-mt-en-map",
1161
+ "Helsinki-NLP/opus-mt-en-lus",
1162
+ "Helsinki-NLP/opus-mt-en-luo",
1163
+ "Helsinki-NLP/opus-mt-en-lun",
1164
+ "Helsinki-NLP/opus-mt-en-lue",
1165
+ "Helsinki-NLP/opus-mt-en-lua",
1166
+ "Helsinki-NLP/opus-mt-en-lu",
1167
+ "Helsinki-NLP/opus-mt-en-loz",
1168
+ "Helsinki-NLP/opus-mt-en-ln",
1169
+ "Helsinki-NLP/opus-mt-en-lg",
1170
+ "Helsinki-NLP/opus-mt-en-kwy",
1171
+ "Helsinki-NLP/opus-mt-en-kwn",
1172
+ "Helsinki-NLP/opus-mt-en-kqn",
1173
+ "Helsinki-NLP/opus-mt-en-kj",
1174
+ "Helsinki-NLP/opus-mt-en-kg",
1175
+ "Helsinki-NLP/opus-mt-en-jap",
1176
+ "Helsinki-NLP/opus-mt-en-itc",
1177
+ "Helsinki-NLP/opus-mt-en-it",
1178
+ "Helsinki-NLP/opus-mt-en-iso",
1179
+ "Helsinki-NLP/opus-mt-en-is",
1180
+ "Helsinki-NLP/opus-mt-en-ine",
1181
+ "Helsinki-NLP/opus-mt-en-inc",
1182
+ "Helsinki-NLP/opus-mt-en-ilo",
1183
+ "Helsinki-NLP/opus-mt-en-iir",
1184
+ "Helsinki-NLP/opus-mt-en-ig",
1185
+ "Helsinki-NLP/opus-mt-en-id",
1186
+ "Helsinki-NLP/opus-mt-en-hy",
1187
+ "Helsinki-NLP/opus-mt-en-hu",
1188
+ "Helsinki-NLP/opus-mt-en-ht",
1189
+ "Helsinki-NLP/opus-mt-en-ho",
1190
+ "Helsinki-NLP/opus-mt-en-hil",
1191
+ "Helsinki-NLP/opus-mt-en-hi",
1192
+ "Helsinki-NLP/opus-mt-en-he",
1193
+ "Helsinki-NLP/opus-mt-en-ha",
1194
+ "Helsinki-NLP/opus-mt-en-gv",
1195
+ "Helsinki-NLP/opus-mt-en-guw",
1196
+ "Helsinki-NLP/opus-mt-en-grk",
1197
+ "Helsinki-NLP/opus-mt-en-gmw",
1198
+ "Helsinki-NLP/opus-mt-en-gmq",
1199
+ "Helsinki-NLP/opus-mt-en-gl",
1200
+ "Helsinki-NLP/opus-mt-en-gil",
1201
+ "Helsinki-NLP/opus-mt-en-gem",
1202
+ "Helsinki-NLP/opus-mt-en-gaa",
1203
+ "Helsinki-NLP/opus-mt-en-ga",
1204
+ "Helsinki-NLP/opus-mt-en-fr",
1205
+ "Helsinki-NLP/opus-mt-en-fj",
1206
+ "Helsinki-NLP/opus-mt-en-fiu",
1207
+ "Helsinki-NLP/opus-mt-en-fi",
1208
+ "Helsinki-NLP/opus-mt-en-euq",
1209
+ "Helsinki-NLP/opus-mt-en-eu",
1210
+ "Helsinki-NLP/opus-mt-en-et",
1211
+ "Helsinki-NLP/opus-mt-en-es",
1212
+ "Helsinki-NLP/opus-mt-en-eo",
1213
+ "Helsinki-NLP/opus-mt-en-el",
1214
+ "Helsinki-NLP/opus-mt-en-efi",
1215
+ "Helsinki-NLP/opus-mt-en-ee",
1216
+ "Helsinki-NLP/opus-mt-en-dra",
1217
+ "Helsinki-NLP/opus-mt-en-de",
1218
+ "Helsinki-NLP/opus-mt-en-da",
1219
+ "Helsinki-NLP/opus-mt-en-cy",
1220
+ "Helsinki-NLP/opus-mt-en-cus",
1221
+ "Helsinki-NLP/opus-mt-en-cs",
1222
+ "Helsinki-NLP/opus-mt-en-crs",
1223
+ "Helsinki-NLP/opus-mt-en-cpp",
1224
+ "Helsinki-NLP/opus-mt-en-cpf",
1225
+ "Helsinki-NLP/opus-mt-en-chk",
1226
+ "Helsinki-NLP/opus-mt-en-cel",
1227
+ "Helsinki-NLP/opus-mt-en-ceb",
1228
+ "Helsinki-NLP/opus-mt-en-ca",
1229
+ "Helsinki-NLP/opus-mt-en-bzs",
1230
+ "Helsinki-NLP/opus-mt-en-bnt",
1231
+ "Helsinki-NLP/opus-mt-en-bi",
1232
+ "Helsinki-NLP/opus-mt-en-bg",
1233
+ "Helsinki-NLP/opus-mt-en-ber",
1234
+ "Helsinki-NLP/opus-mt-en-bem",
1235
+ "Helsinki-NLP/opus-mt-en-bcl",
1236
+ "Helsinki-NLP/opus-mt-en-bat",
1237
+ "Helsinki-NLP/opus-mt-en-az",
1238
+ "Helsinki-NLP/opus-mt-en-ar",
1239
+ "Helsinki-NLP/opus-mt-en-alv",
1240
+ "Helsinki-NLP/opus-mt-en-afa",
1241
+ "Helsinki-NLP/opus-mt-en-af",
1242
+ "Helsinki-NLP/opus-mt-en-aav",
1243
+ "Helsinki-NLP/opus-mt-en-ROMANCE",
1244
+ "Helsinki-NLP/opus-mt-en-CELTIC",
1245
+ "Helsinki-NLP/opus-mt-el-sv",
1246
+ "Helsinki-NLP/opus-mt-el-fr",
1247
+ "Helsinki-NLP/opus-mt-el-fi",
1248
+ "Helsinki-NLP/opus-mt-el-eo",
1249
+ "Helsinki-NLP/opus-mt-el-ar",
1250
+ "Helsinki-NLP/opus-mt-efi-sv",
1251
+ "Helsinki-NLP/opus-mt-efi-fr",
1252
+ "Helsinki-NLP/opus-mt-efi-fi",
1253
+ "Helsinki-NLP/opus-mt-efi-en",
1254
+ "Helsinki-NLP/opus-mt-efi-de",
1255
+ "Helsinki-NLP/opus-mt-ee-sv",
1256
+ "Helsinki-NLP/opus-mt-ee-fr",
1257
+ "Helsinki-NLP/opus-mt-ee-fi",
1258
+ "Helsinki-NLP/opus-mt-ee-es",
1259
+ "Helsinki-NLP/opus-mt-ee-en",
1260
+ "Helsinki-NLP/opus-mt-ee-de",
1261
+ "Helsinki-NLP/opus-mt-dra-en",
1262
+ "Helsinki-NLP/opus-mt-de-vi",
1263
+ "Helsinki-NLP/opus-mt-de-uk",
1264
+ "Helsinki-NLP/opus-mt-de-tl",
1265
+ "Helsinki-NLP/opus-mt-de-pon",
1266
+ "Helsinki-NLP/opus-mt-de-pl",
1267
+ "Helsinki-NLP/opus-mt-de-pis",
1268
+ "Helsinki-NLP/opus-mt-de-pap",
1269
+ "Helsinki-NLP/opus-mt-de-pag",
1270
+ "Helsinki-NLP/opus-mt-de-ny",
1271
+ "Helsinki-NLP/opus-mt-de-nso",
1272
+ "Helsinki-NLP/opus-mt-de-no",
1273
+ "Helsinki-NLP/opus-mt-de-nl",
1274
+ "Helsinki-NLP/opus-mt-de-niu",
1275
+ "Helsinki-NLP/opus-mt-de-mt",
1276
+ "Helsinki-NLP/opus-mt-de-ms",
1277
+ "Helsinki-NLP/opus-mt-de-lua",
1278
+ "Helsinki-NLP/opus-mt-de-lt",
1279
+ "Helsinki-NLP/opus-mt-de-loz",
1280
+ "Helsinki-NLP/opus-mt-de-ln",
1281
+ "Helsinki-NLP/opus-mt-de-kg",
1282
+ "Helsinki-NLP/opus-mt-de-it",
1283
+ "Helsinki-NLP/opus-mt-de-iso",
1284
+ "Helsinki-NLP/opus-mt-de-is",
1285
+ "Helsinki-NLP/opus-mt-de-ilo",
1286
+ "Helsinki-NLP/opus-mt-de-ig",
1287
+ "Helsinki-NLP/opus-mt-de-hu",
1288
+ "Helsinki-NLP/opus-mt-de-ht",
1289
+ "Helsinki-NLP/opus-mt-de-hr",
1290
+ "Helsinki-NLP/opus-mt-de-ho",
1291
+ "Helsinki-NLP/opus-mt-de-hil",
1292
+ "Helsinki-NLP/opus-mt-de-he",
1293
+ "Helsinki-NLP/opus-mt-de-ha",
1294
+ "Helsinki-NLP/opus-mt-de-guw",
1295
+ "Helsinki-NLP/opus-mt-de-gil",
1296
+ "Helsinki-NLP/opus-mt-de-gaa",
1297
+ "Helsinki-NLP/opus-mt-de-fr",
1298
+ "Helsinki-NLP/opus-mt-de-fj",
1299
+ "Helsinki-NLP/opus-mt-de-fi",
1300
+ "Helsinki-NLP/opus-mt-de-eu",
1301
+ "Helsinki-NLP/opus-mt-de-et",
1302
+ "Helsinki-NLP/opus-mt-de-es",
1303
+ "Helsinki-NLP/opus-mt-de-eo",
1304
+ "Helsinki-NLP/opus-mt-de-en",
1305
+ "Helsinki-NLP/opus-mt-de-el",
1306
+ "Helsinki-NLP/opus-mt-de-efi",
1307
+ "Helsinki-NLP/opus-mt-de-ee",
1308
+ "Helsinki-NLP/opus-mt-de-de",
1309
+ "Helsinki-NLP/opus-mt-de-da",
1310
+ "Helsinki-NLP/opus-mt-de-cs",
1311
+ "Helsinki-NLP/opus-mt-de-crs",
1312
+ "Helsinki-NLP/opus-mt-de-ca",
1313
+ "Helsinki-NLP/opus-mt-de-bzs",
1314
+ "Helsinki-NLP/opus-mt-de-bi",
1315
+ "Helsinki-NLP/opus-mt-de-bg",
1316
+ "Helsinki-NLP/opus-mt-de-bcl",
1317
+ "Helsinki-NLP/opus-mt-de-ase",
1318
+ "Helsinki-NLP/opus-mt-de-ar",
1319
+ "Helsinki-NLP/opus-mt-de-af",
1320
+ "Helsinki-NLP/opus-mt-de-ZH",
1321
+ "Helsinki-NLP/opus-mt-da-ru",
1322
+ "Helsinki-NLP/opus-mt-da-no",
1323
+ "Helsinki-NLP/opus-mt-da-fr",
1324
+ "Helsinki-NLP/opus-mt-da-fi",
1325
+ "Helsinki-NLP/opus-mt-da-es",
1326
+ "Helsinki-NLP/opus-mt-da-eo",
1327
+ "Helsinki-NLP/opus-mt-da-en",
1328
+ "Helsinki-NLP/opus-mt-da-de",
1329
+ "Helsinki-NLP/opus-mt-cy-en",
1330
+ "Helsinki-NLP/opus-mt-cus-en",
1331
+ "Helsinki-NLP/opus-mt-csn-es",
1332
+ "Helsinki-NLP/opus-mt-csg-es",
1333
+ "Helsinki-NLP/opus-mt-cs-uk",
1334
+ "Helsinki-NLP/opus-mt-cs-sv",
1335
+ "Helsinki-NLP/opus-mt-cs-fr",
1336
+ "Helsinki-NLP/opus-mt-cs-fi",
1337
+ "Helsinki-NLP/opus-mt-cs-eo",
1338
+ "Helsinki-NLP/opus-mt-cs-en",
1339
+ "Helsinki-NLP/opus-mt-cs-de",
1340
+ "Helsinki-NLP/opus-mt-crs-sv",
1341
+ "Helsinki-NLP/opus-mt-crs-fr",
1342
+ "Helsinki-NLP/opus-mt-crs-fi",
1343
+ "Helsinki-NLP/opus-mt-crs-es",
1344
+ "Helsinki-NLP/opus-mt-crs-en",
1345
+ "Helsinki-NLP/opus-mt-crs-de",
1346
+ "Helsinki-NLP/opus-mt-cpp-en",
1347
+ "Helsinki-NLP/opus-mt-cpp-cpp",
1348
+ "Helsinki-NLP/opus-mt-cpf-en",
1349
+ "Helsinki-NLP/opus-mt-chk-sv",
1350
+ "Helsinki-NLP/opus-mt-chk-fr",
1351
+ "Helsinki-NLP/opus-mt-chk-es",
1352
+ "Helsinki-NLP/opus-mt-chk-en",
1353
+ "Helsinki-NLP/opus-mt-cel-en",
1354
+ "Helsinki-NLP/opus-mt-ceb-sv",
1355
+ "Helsinki-NLP/opus-mt-ceb-fr",
1356
+ "Helsinki-NLP/opus-mt-ceb-fi",
1357
+ "Helsinki-NLP/opus-mt-ceb-es",
1358
+ "Helsinki-NLP/opus-mt-ceb-en",
1359
+ "Helsinki-NLP/opus-mt-ccs-en",
1360
+ "Helsinki-NLP/opus-mt-cau-en",
1361
+ "Helsinki-NLP/opus-mt-ca-uk",
1362
+ "Helsinki-NLP/opus-mt-ca-pt",
1363
+ "Helsinki-NLP/opus-mt-ca-nl",
1364
+ "Helsinki-NLP/opus-mt-ca-it",
1365
+ "Helsinki-NLP/opus-mt-ca-fr",
1366
+ "Helsinki-NLP/opus-mt-ca-es",
1367
+ "Helsinki-NLP/opus-mt-ca-en",
1368
+ "Helsinki-NLP/opus-mt-ca-de",
1369
+ "Helsinki-NLP/opus-mt-bzs-sv",
1370
+ "Helsinki-NLP/opus-mt-bzs-fr",
1371
+ "Helsinki-NLP/opus-mt-bzs-fi",
1372
+ "Helsinki-NLP/opus-mt-bzs-es",
1373
+ "Helsinki-NLP/opus-mt-bzs-en",
1374
+ "Helsinki-NLP/opus-mt-bnt-en",
1375
+ "Helsinki-NLP/opus-mt-bn-en",
1376
+ "Helsinki-NLP/opus-mt-bi-sv",
1377
+ "Helsinki-NLP/opus-mt-bi-fr",
1378
+ "Helsinki-NLP/opus-mt-bi-es",
1379
+ "Helsinki-NLP/opus-mt-bi-en",
1380
+ "Helsinki-NLP/opus-mt-bg-uk",
1381
+ "Helsinki-NLP/opus-mt-bg-tr",
1382
+ "Helsinki-NLP/opus-mt-bg-sv",
1383
+ "Helsinki-NLP/opus-mt-bg-ru",
1384
+ "Helsinki-NLP/opus-mt-bg-it",
1385
+ "Helsinki-NLP/opus-mt-bg-fr",
1386
+ "Helsinki-NLP/opus-mt-bg-fi",
1387
+ "Helsinki-NLP/opus-mt-bg-es",
1388
+ "Helsinki-NLP/opus-mt-bg-eo",
1389
+ "Helsinki-NLP/opus-mt-bg-en",
1390
+ "Helsinki-NLP/opus-mt-bg-de",
1391
+ "Helsinki-NLP/opus-mt-ber-fr",
1392
+ "Helsinki-NLP/opus-mt-ber-es",
1393
+ "Helsinki-NLP/opus-mt-ber-en",
1394
+ "Helsinki-NLP/opus-mt-bem-sv",
1395
+ "Helsinki-NLP/opus-mt-bem-fr",
1396
+ "Helsinki-NLP/opus-mt-bem-fi",
1397
+ "Helsinki-NLP/opus-mt-bem-es",
1398
+ "Helsinki-NLP/opus-mt-bem-en",
1399
+ "Helsinki-NLP/opus-mt-be-es",
1400
+ "Helsinki-NLP/opus-mt-bcl-sv",
1401
+ "Helsinki-NLP/opus-mt-bcl-fr",
1402
+ "Helsinki-NLP/opus-mt-bcl-fi",
1403
+ "Helsinki-NLP/opus-mt-bcl-es",
1404
+ "Helsinki-NLP/opus-mt-bcl-en",
1405
+ "Helsinki-NLP/opus-mt-bcl-de",
1406
+ "Helsinki-NLP/opus-mt-bat-en",
1407
+ "Helsinki-NLP/opus-mt-az-tr",
1408
+ "Helsinki-NLP/opus-mt-az-es",
1409
+ "Helsinki-NLP/opus-mt-az-en",
1410
+ "Helsinki-NLP/opus-mt-ase-sv",
1411
+ "Helsinki-NLP/opus-mt-ase-fr",
1412
+ "Helsinki-NLP/opus-mt-ase-es",
1413
+ "Helsinki-NLP/opus-mt-ase-en",
1414
+ "Helsinki-NLP/opus-mt-ase-de",
1415
+ "Helsinki-NLP/opus-mt-art-en",
1416
+ "Helsinki-NLP/opus-mt-ar-tr",
1417
+ "Helsinki-NLP/opus-mt-ar-ru",
1418
+ "Helsinki-NLP/opus-mt-ar-pl",
1419
+ "Helsinki-NLP/opus-mt-ar-it",
1420
+ "Helsinki-NLP/opus-mt-ar-he",
1421
+ "Helsinki-NLP/opus-mt-ar-fr",
1422
+ "Helsinki-NLP/opus-mt-ar-es",
1423
+ "Helsinki-NLP/opus-mt-ar-eo",
1424
+ "Helsinki-NLP/opus-mt-ar-en",
1425
+ "Helsinki-NLP/opus-mt-ar-el",
1426
+ "Helsinki-NLP/opus-mt-ar-de",
1427
+ "Helsinki-NLP/opus-mt-am-sv",
1428
+ "Helsinki-NLP/opus-mt-alv-en",
1429
+ "Helsinki-NLP/opus-mt-afa-en",
1430
+ "Helsinki-NLP/opus-mt-afa-afa",
1431
+ "Helsinki-NLP/opus-mt-af-sv",
1432
+ "Helsinki-NLP/opus-mt-af-ru",
1433
+ "Helsinki-NLP/opus-mt-af-nl",
1434
+ "Helsinki-NLP/opus-mt-af-fr",
1435
+ "Helsinki-NLP/opus-mt-af-fi",
1436
+ "Helsinki-NLP/opus-mt-af-es",
1437
+ "Helsinki-NLP/opus-mt-af-eo",
1438
+ "Helsinki-NLP/opus-mt-af-en",
1439
+ "Helsinki-NLP/opus-mt-af-de",
1440
+ "Helsinki-NLP/opus-mt-aed-es",
1441
+ "Helsinki-NLP/opus-mt-aav-en",
1442
+ "Helsinki-NLP/opus-mt-SCANDINAVIA-SCANDINAVIA",
1443
+ "Helsinki-NLP/opus-mt-ROMANCE-en",
1444
+ "Helsinki-NLP/opus-mt-NORTH_EU-NORTH_EU",
1445
+ "Helsinki-NLP/opus-mt-he-fr"
1446
+ ]
1447
+
1448
+ def get_clearly_formatted_langauge_directions():
1449
+ # Clearly formatted language directions only
1450
+ # Helsinki-NLP/opus-mt-tc-base-bat-zle is ignored
1451
+ # Helsinki-NLP/opus-mt-tc-fr-en is accepted due to clarity of source language being fr and target language being en
1452
+ language_directions = [model.split("Helsinki-NLP/opus-mt-")[1] for model in helsinki_models
1453
+ if (len(model.split("-"))<6 and
1454
+ "opus-mt" in model and
1455
+ len(model.split("_")) == 1)
1456
+ and len(model) < len("Helsinki-NLP/opus-mt-src-trg")]
1457
+ return language_directions
iso639_wrapper.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from iso639 import Lang, iter_langs
2
+ from regex import R
3
+
4
+
5
+ langs = [lang for lang in iter_langs()]
6
+
7
+ # iso 1
8
+ iso1_code_to_name = {lg.pt1: lg.name for lg in langs}
9
+ iso1_name_to_code = {lg.name: lg.pt1 for lg in langs}
10
+
11
+ # iso 2
12
+ iso2b_code_to_name = {lg.pt2b: lg.name for lg in langs}
13
+ iso2b_name_to_code = {lg.name: lg.pt2b for lg in langs}
14
+ iso2t_code_to_name = {lg.pt2t: lg.name for lg in langs}
15
+ iso2t_name_to_code = {lg.name: lg.pt2t for lg in langs}
16
+
17
+ # iso 3
18
+ iso3_code_to_name = {lg.pt3: lg.name for lg in langs}
19
+ iso3_name_to_code = {lg.name: lg.pt3 for lg in langs}
20
+
21
+ # iso 5
22
+ iso5_code_to_name = {lg.pt5: lg.name for lg in langs}
23
+ iso5_name_to_code = {lg.name: lg.pt5 for lg in langs}
24
+
25
+ # https://github.com/Helsinki-NLP/Tatoeba-Challenge/blob/master/README.md#in-more-detail
26
+ helsinki_precendence = ["iso3", "iso5", "iso1", "iso2t", "iso2b"]
27
+
28
+ rename_dict = {"Panjabi": "Punjabi"}
29
+
30
+ def rename_languages(language):
31
+ if language in rename_dict:
32
+ return rename_dict[language]
33
+ return language
34
+
35
+ def rename_return_value(func):
36
+ def wrapper(*args, **kwargs):
37
+ result = func(*args, **kwargs)
38
+ if isinstance(result, str):
39
+ return rename_languages(result)
40
+ elif isinstance(result, list):
41
+ return [rename_languages(item) for item in result]
42
+ elif isinstance(result, dict):
43
+ return {key: rename_languages(value) for key, value in result.items()}
44
+ else:
45
+ return result
46
+ return wrapper
47
+
48
+ @rename_return_value
49
+ def get_name_from_iso_code(iso_code, precedence=helsinki_precendence):
50
+ for code_type in precedence:
51
+ if code_type == "iso1" and iso_code in iso1_code_to_name.keys():
52
+ return iso1_code_to_name[iso_code]
53
+ elif code_type == "iso2b" and iso_code in iso2b_code_to_name.keys():
54
+ return iso2b_code_to_name[iso_code]
55
+ elif code_type == "iso2t" and iso_code in iso2t_code_to_name.keys():
56
+ return iso2t_code_to_name[iso_code]
57
+ elif code_type == "iso3" and iso_code in iso3_code_to_name.keys():
58
+ return iso3_code_to_name[iso_code]
59
+ elif code_type == "iso5" and iso_code in iso5_code_to_name.keys():
60
+ return iso5_code_to_name[iso_code]
language_detection.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pycld2 as cld2
2
+ from langdetect import detect
3
+
4
+ def detect_language(input_text):
5
+ if not input_text:
6
+ return "unknown"
7
+ _, _, details = cld2.detect(input_text)
8
+ detected_langauge = details[0][0].lower()
9
+ if detected_langauge == "unknown":
10
+ language_code = detect(input_text)
11
+ return language_code
12
+ else:
13
+ return detected_langauge
language_directions.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from helsinki_models import helsinki_models, get_clearly_formatted_langauge_directions
2
+ from iso639_wrapper import get_name_from_iso_code
3
+ from collections import OrderedDict
4
+ from utils import convert_keys_to_lowercase, match_in_keys, match_in_values
5
+
6
+
7
+ def get_all_source_languages():
8
+ """
9
+ Returns a human-readable `dict source_languages_names:codes`
10
+ based on the available models.
11
+ """
12
+ source_languages = {}
13
+ language_directions = get_clearly_formatted_langauge_directions()
14
+
15
+ for direction in language_directions:
16
+ source_lang_code = direction.split('-')[0]
17
+ source_language_name = get_name_from_iso_code(source_lang_code)
18
+ if source_language_name:
19
+ source_languages[source_language_name] = source_lang_code
20
+ source_languages = OrderedDict(sorted(source_languages.items()))
21
+ return source_languages
22
+
23
+ def get_target_languages(source_language_code):
24
+ """
25
+ Returns a human-readable `dict of target languages names to codes`
26
+ based on the available models and the source language passed.
27
+ """
28
+ target_languages = {}
29
+ language_directions = get_clearly_formatted_langauge_directions()
30
+ for direction in language_directions:
31
+ if direction.startswith(f"{source_language_code}-"):
32
+ target_language = direction.split('-')[1] # Extracting the last part as the target language
33
+ target_language_name = get_name_from_iso_code(target_language)
34
+ if target_language_name:
35
+ target_languages[target_language_name] = target_language
36
+ return OrderedDict(sorted(target_languages.items())), source_language_code
37
+
38
+ # Example usage:
39
+ # all_source_languages = get_all_source_languages()
40
+ # print("All Source Languages:", all_source_languages)
41
+
42
+ # source_language_code = "pa" # Replace with your desired source language
43
+ # target_languages = get_target_languages(source_language_code)
44
+ # print(f"Target Languages for {source_language_code}:", target_languages)
project-notes.md ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ # Scope of project
2
+ 1. Enable multiple languages translate based on helsinki models.✅
3
+ 2. Enable auto detect langauge ✅
4
+ 3. Show error message instead of gradio error ✅
5
+ 4. Add examples ✅
6
+ 5. Auto detect on text change ✅
requirements.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -i https://pypi.python.org/simple
2
+ gradio==3.*
3
+ iso639-lang
4
+ pycld2 # In future, maybe use lingua-language-detector
5
+ torch
6
+ transformers
7
+ sentencepiece
8
+ langdetect
9
+ sacremoses
10
+ langchain_openai
11
+ python-dotenv
12
+ openai
13
+ langsmith
14
+ langchain
15
+ langchainhub
translator.py ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from langchain_openai import ChatOpenAI
3
+ from dotenv import load_dotenv
4
+ import json
5
+ import openai
6
+ from langsmith.wrappers import wrap_openai
7
+ from langsmith import traceable
8
+ from langchain import hub
9
+ import re
10
+
11
+ load_dotenv()
12
+
13
+ # --------------------------------------------------
14
+ # Utility Functions
15
+ # --------------------------------------------------
16
+
17
+ client = wrap_openai(openai.OpenAI())
18
+
19
+ chatModel_json = ChatOpenAI(
20
+ model="gpt-4o",
21
+ model_kwargs={"response_format": {"type": "json_object"}},
22
+ )
23
+
24
+ chatModel_no_json = ChatOpenAI(
25
+ model="gpt-4o"
26
+ )
27
+
28
+ async def parse_json_with_retries(json_string, max_attempts=3):
29
+ for attempt in range(max_attempts):
30
+ try:
31
+ return json.loads(json_string)
32
+ except json.JSONDecodeError as error:
33
+ if attempt == max_attempts - 1:
34
+ raise error
35
+
36
+ @traceable
37
+ async def invoke_agent(runnable, params):
38
+ content = runnable.invoke(params)
39
+ if hasattr(content, 'content'):
40
+ content = content.content
41
+ return content
42
+
43
+ # --------------------------------------------------
44
+ # Translation Function
45
+ # --------------------------------------------------
46
+
47
+ @traceable
48
+ async def translate_text(text, target_language):
49
+
50
+ try:
51
+ first_prompt = hub.pull("getgloby/agent-1-get-info")
52
+ print("First prompt pulled successfully.")
53
+ except Exception as e:
54
+ print(f"Error al obtener el primer agente: {e}")
55
+ return
56
+
57
+ first_runnable = first_prompt | chatModel_no_json
58
+
59
+ try:
60
+ first_agent_output = await invoke_agent(first_runnable, {
61
+ "originalText": text,
62
+ "targetLanguage": target_language,
63
+ })
64
+ print(f"First agent output: {first_agent_output}")
65
+ except Exception as e:
66
+ print(f"Error invoking first agent: {e}")
67
+ print(f"Error details: {e}")
68
+ return
69
+
70
+ translations = []
71
+
72
+ for i in range(3):
73
+ try:
74
+ second_prompt = hub.pull("getgloby/agent-2-translate")
75
+ print(f"Second prompt pulled successfully for iteration {i + 1}.")
76
+ except Exception as e:
77
+ print(f"Error al obtener el segundo agente en la iteración {i + 1}: {e}")
78
+ continue
79
+
80
+ second_runnable = second_prompt | chatModel_json
81
+
82
+ try:
83
+ second_agent_output = await invoke_agent(second_runnable, {
84
+ "originalText": text,
85
+ "firstAgentOutput": first_agent_output,
86
+ "targetLanguage": target_language,
87
+ })
88
+ print(f"Second agent output (iteration {i + 1}): {second_agent_output}")
89
+ except Exception as e:
90
+ print(f"Error invoking second agent in iteration {i + 1}: {e}")
91
+ print(f"Error details: {e}")
92
+ continue
93
+
94
+ try:
95
+ parsed_second_agent_output = await parse_json_with_retries(second_agent_output)
96
+ translation = parsed_second_agent_output["translation"]
97
+ print(f"Parsed second agent output (iteration {i + 1}): {translation}")
98
+ except Exception as e:
99
+ print(f"Error parsing second agent output in iteration {i + 1}: {e}")
100
+ print(f"Error details: {e}")
101
+ continue
102
+
103
+ try:
104
+ third_prompt = hub.pull("getgloby/agent-3-improve-translation")
105
+ print(f"Third prompt pulled successfully for iteration {i + 1}.")
106
+ except Exception as e:
107
+ print(f"Error al obtener el tercer agente en la iteración {i + 1}: {e}")
108
+ continue
109
+
110
+ third_runnable = third_prompt | chatModel_json
111
+
112
+ try:
113
+ third_agent_output = await invoke_agent(third_runnable, {
114
+ "originalText": text,
115
+ "firstAgentOutput": first_agent_output,
116
+ "secondAgentOutput": translation,
117
+ })
118
+ print(f"Third agent output (iteration {i + 1}): {third_agent_output}")
119
+ except Exception as e:
120
+ print(f"Error invoking third agent in iteration {i + 1}: {e}")
121
+ print(f"Error details: {e}")
122
+ continue
123
+
124
+ try:
125
+ third_agent_output_json = await parse_json_with_retries(third_agent_output)
126
+ optimized_translation = third_agent_output_json["optimizedTranslation"]
127
+ print(f"Optimized translation (iteration {i + 1}): {optimized_translation}")
128
+ except Exception as e:
129
+ print(f"Error parsing third agent output in iteration {i + 1}: {e}")
130
+ print(f"Error details: {e}")
131
+ continue
132
+
133
+ translations.append(optimized_translation)
134
+
135
+ try:
136
+ final_prompt = hub.pull("getgloby/agent-4-final-translation")
137
+ print("Final prompt pulled successfully.")
138
+ except Exception as e:
139
+ print(f"Error al obtener el agente final: {e}")
140
+ return
141
+
142
+ final_runnable = final_prompt | chatModel_json
143
+
144
+ try:
145
+ final_agent_output = await invoke_agent(final_runnable, {
146
+ "originalText": text,
147
+ "firstAgentOutput": first_agent_output, # Cambiado de contextInfo a firstAgentOutput
148
+ "translation1": translations[0],
149
+ "translation2": translations[1],
150
+ "translation3": translations[2],
151
+ "targetLanguage": target_language,
152
+ })
153
+ print(f"Final agent output: {final_agent_output}")
154
+ except Exception as e:
155
+ print(f"Error invoking final agent: {e}")
156
+ print(f"Error details: {e}")
157
+ return
158
+
159
+ try:
160
+ final_agent_output_json = await parse_json_with_retries(final_agent_output)
161
+ final_translation = final_agent_output_json["finalTranslation"]
162
+ print(f"Final translation: {final_translation}")
163
+ except Exception as e:
164
+ print(f"Error parsing final agent output: {e}")
165
+ print(f"Error details: {e}")
166
+ return
167
+
168
+ return final_translation
utils.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from functools import cache
2
+
3
+
4
+ def convert_keys_to_lowercase(input_dict):
5
+ return {key.lower(): value for key, value in input_dict.items()}
6
+
7
+ def match_in_keys(dictionary, search_string):
8
+ lowercase_dict = convert_keys_to_lowercase(dictionary)
9
+ if search_string.lower() in list(lowercase_dict.keys()):
10
+ return lowercase_dict.get(search_string.lower())
11
+ for l_key in lowercase_dict.keys():
12
+ if l_key.startswith(search_string.lower()):
13
+ return lowercase_dict.get(l_key)
14
+
15
+ def match_in_values(dictionary, search_string):
16
+ lowercase_dict = convert_keys_to_lowercase(dictionary)
17
+ if search_string.lower() in list(lowercase_dict.values()):
18
+ return search_string