| {%- set languages = { |
| "aa": "Afar", |
| "aa-DJ": "Afar", |
| "aa-ER": "Afar", |
| "ab": "Abkhazian", |
| "af": "Afrikaans", |
| "af-NA": "Afrikaans", |
| "ak": "Akan", |
| "am": "Amharic", |
| "an": "Aragonese", |
| "ar": "Arabic", |
| "ar-AE": "Arabic", |
| "ar-BH": "Arabic", |
| "ar-DJ": "Arabic", |
| "ar-DZ": "Arabic", |
| "ar-EG": "Arabic", |
| "ar-EH": "Arabic", |
| "ar-ER": "Arabic", |
| "ar-IL": "Arabic", |
| "ar-IQ": "Arabic", |
| "ar-JO": "Arabic", |
| "ar-KM": "Arabic", |
| "ar-KW": "Arabic", |
| "ar-LB": "Arabic", |
| "ar-LY": "Arabic", |
| "ar-MA": "Arabic", |
| "ar-MR": "Arabic", |
| "ar-OM": "Arabic", |
| "ar-PS": "Arabic", |
| "ar-QA": "Arabic", |
| "ar-SA": "Arabic", |
| "ar-SD": "Arabic", |
| "ar-SO": "Arabic", |
| "ar-SS": "Arabic", |
| "ar-SY": "Arabic", |
| "ar-TD": "Arabic", |
| "ar-TN": "Arabic", |
| "ar-YE": "Arabic", |
| "as": "Assamese", |
| "az": "Azerbaijani", |
| "az-Arab": "Azerbaijani", |
| "az-Arab-IQ": "Azerbaijani", |
| "az-Arab-TR": "Azerbaijani", |
| "az-Cyrl": "Azerbaijani", |
| "az-Latn": "Azerbaijani", |
| "ba": "Bashkir", |
| "be": "Belarusian", |
| "be-tarask": "Belarusian", |
| "bg": "Bulgarian", |
| "bg-BG": "Bulgarian", |
| "bm": "Bambara", |
| "bm-Nkoo": "Bambara", |
| "bn": "Bengali", |
| "bn-IN": "Bengali", |
| "bo": "Tibetan", |
| "bo-IN": "Tibetan", |
| "br": "Breton", |
| "bs": "Bosnian", |
| "bs-Cyrl": "Bosnian", |
| "bs-Latn": "Bosnian", |
| "ca": "Catalan", |
| "ca-AD": "Catalan", |
| "ca-ES": "Catalan", |
| "ca-FR": "Catalan", |
| "ca-IT": "Catalan", |
| "ce": "Chechen", |
| "co": "Corsican", |
| "cs": "Czech", |
| "cs-CZ": "Czech", |
| "cv": "Chuvash", |
| "cy": "Welsh", |
| "da": "Danish", |
| "da-DK": "Danish", |
| "da-GL": "Danish", |
| "de": "German", |
| "de-AT": "German", |
| "de-BE": "German", |
| "de-CH": "German", |
| "de-DE": "German", |
| "de-IT": "German", |
| "de-LI": "German", |
| "de-LU": "German", |
| "dv": "Divehi", |
| "dz": "Dzongkha", |
| "ee": "Ewe", |
| "ee-TG": "Ewe", |
| "el": "Greek", |
| "el-CY": "Greek", |
| "el-GR": "Greek", |
| "el-polyton": "Greek", |
| "en": "English", |
| "en-AE": "English", |
| "en-AG": "English", |
| "en-AI": "English", |
| "en-AS": "English", |
| "en-AT": "English", |
| "en-AU": "English", |
| "en-BB": "English", |
| "en-BE": "English", |
| "en-BI": "English", |
| "en-BM": "English", |
| "en-BS": "English", |
| "en-BW": "English", |
| "en-BZ": "English", |
| "en-CA": "English", |
| "en-CC": "English", |
| "en-CH": "English", |
| "en-CK": "English", |
| "en-CM": "English", |
| "en-CX": "English", |
| "en-CY": "English", |
| "en-CZ": "English", |
| "en-DE": "English", |
| "en-DG": "English", |
| "en-DK": "English", |
| "en-DM": "English", |
| "en-ER": "English", |
| "en-ES": "English", |
| "en-FI": "English", |
| "en-FJ": "English", |
| "en-FK": "English", |
| "en-FM": "English", |
| "en-FR": "English", |
| "en-GB": "English", |
| "en-GD": "English", |
| "en-GG": "English", |
| "en-GH": "English", |
| "en-GI": "English", |
| "en-GM": "English", |
| "en-GS": "English", |
| "en-GU": "English", |
| "en-GY": "English", |
| "en-HK": "English", |
| "en-HU": "English", |
| "en-ID": "English", |
| "en-IE": "English", |
| "en-IL": "English", |
| "en-IM": "English", |
| "en-IN": "English", |
| "en-IO": "English", |
| "en-IT": "English", |
| "en-JE": "English", |
| "en-JM": "English", |
| "en-KE": "English", |
| "en-KI": "English", |
| "en-KN": "English", |
| "en-KY": "English", |
| "en-LC": "English", |
| "en-LR": "English", |
| "en-LS": "English", |
| "en-MG": "English", |
| "en-MH": "English", |
| "en-MO": "English", |
| "en-MP": "English", |
| "en-MS": "English", |
| "en-MT": "English", |
| "en-MU": "English", |
| "en-MV": "English", |
| "en-MW": "English", |
| "en-MY": "English", |
| "en-NA": "English", |
| "en-NF": "English", |
| "en-NG": "English", |
| "en-NL": "English", |
| "en-NO": "English", |
| "en-NR": "English", |
| "en-NU": "English", |
| "en-NZ": "English", |
| "en-PG": "English", |
| "en-PH": "English", |
| "en-PK": "English", |
| "en-PL": "English", |
| "en-PN": "English", |
| "en-PR": "English", |
| "en-PT": "English", |
| "en-PW": "English", |
| "en-RO": "English", |
| "en-RW": "English", |
| "en-SB": "English", |
| "en-SC": "English", |
| "en-SD": "English", |
| "en-SE": "English", |
| "en-SG": "English", |
| "en-SH": "English", |
| "en-SI": "English", |
| "en-SK": "English", |
| "en-SL": "English", |
| "en-SS": "English", |
| "en-SX": "English", |
| "en-SZ": "English", |
| "en-TC": "English", |
| "en-TK": "English", |
| "en-TO": "English", |
| "en-TT": "English", |
| "en-TV": "English", |
| "en-TZ": "English", |
| "en-UG": "English", |
| "en-UM": "English", |
| "en-VC": "English", |
| "en-VG": "English", |
| "en-VI": "English", |
| "en-VU": "English", |
| "en-WS": "English", |
| "en-ZA": "English", |
| "en-ZM": "English", |
| "en-ZW": "English", |
| "eo": "Esperanto", |
| "es": "Spanish", |
| "es-AR": "Spanish", |
| "es-BO": "Spanish", |
| "es-BR": "Spanish", |
| "es-BZ": "Spanish", |
| "es-CL": "Spanish", |
| "es-CO": "Spanish", |
| "es-CR": "Spanish", |
| "es-CU": "Spanish", |
| "es-DO": "Spanish", |
| "es-EA": "Spanish", |
| "es-EC": "Spanish", |
| "es-ES": "Spanish", |
| "es-GQ": "Spanish", |
| "es-GT": "Spanish", |
| "es-HN": "Spanish", |
| "es-IC": "Spanish", |
| "es-MX": "Spanish", |
| "es-NI": "Spanish", |
| "es-PA": "Spanish", |
| "es-PE": "Spanish", |
| "es-PH": "Spanish", |
| "es-PR": "Spanish", |
| "es-PY": "Spanish", |
| "es-SV": "Spanish", |
| "es-US": "Spanish", |
| "es-UY": "Spanish", |
| "es-VE": "Spanish", |
| "et": "Estonian", |
| "et-EE": "Estonian", |
| "eu": "Basque", |
| "fa": "Persian", |
| "fa-AF": "Persian", |
| "fa-IR": "Persian", |
| "ff": "Fulah", |
| "ff-Adlm": "Fulah", |
| "ff-Adlm-BF": "Fulah", |
| "ff-Adlm-CM": "Fulah", |
| "ff-Adlm-GH": "Fulah", |
| "ff-Adlm-GM": "Fulah", |
| "ff-Adlm-GW": "Fulah", |
| "ff-Adlm-LR": "Fulah", |
| "ff-Adlm-MR": "Fulah", |
| "ff-Adlm-NE": "Fulah", |
| "ff-Adlm-NG": "Fulah", |
| "ff-Adlm-SL": "Fulah", |
| "ff-Adlm-SN": "Fulah", |
| "ff-Latn": "Fulah", |
| "ff-Latn-BF": "Fulah", |
| "ff-Latn-CM": "Fulah", |
| "ff-Latn-GH": "Fulah", |
| "ff-Latn-GM": "Fulah", |
| "ff-Latn-GN": "Fulah", |
| "ff-Latn-GW": "Fulah", |
| "ff-Latn-LR": "Fulah", |
| "ff-Latn-MR": "Fulah", |
| "ff-Latn-NE": "Fulah", |
| "ff-Latn-NG": "Fulah", |
| "ff-Latn-SL": "Fulah", |
| "fi": "Finnish", |
| "fi-FI": "Finnish", |
| "fil-PH": "Filipino", |
| "fo": "Faroese", |
| "fo-DK": "Faroese", |
| "fr": "French", |
| "fr-BE": "French", |
| "fr-BF": "French", |
| "fr-BI": "French", |
| "fr-BJ": "French", |
| "fr-BL": "French", |
| "fr-CA": "French", |
| "fr-CD": "French", |
| "fr-CF": "French", |
| "fr-CG": "French", |
| "fr-CH": "French", |
| "fr-CI": "French", |
| "fr-CM": "French", |
| "fr-DJ": "French", |
| "fr-DZ": "French", |
| "fr-FR": "French", |
| "fr-GA": "French", |
| "fr-GF": "French", |
| "fr-GN": "French", |
| "fr-GP": "French", |
| "fr-GQ": "French", |
| "fr-HT": "French", |
| "fr-KM": "French", |
| "fr-LU": "French", |
| "fr-MA": "French", |
| "fr-MC": "French", |
| "fr-MF": "French", |
| "fr-MG": "French", |
| "fr-ML": "French", |
| "fr-MQ": "French", |
| "fr-MR": "French", |
| "fr-MU": "French", |
| "fr-NC": "French", |
| "fr-NE": "French", |
| "fr-PF": "French", |
| "fr-PM": "French", |
| "fr-RE": "French", |
| "fr-RW": "French", |
| "fr-SC": "French", |
| "fr-SN": "French", |
| "fr-SY": "French", |
| "fr-TD": "French", |
| "fr-TG": "French", |
| "fr-TN": "French", |
| "fr-VU": "French", |
| "fr-WF": "French", |
| "fr-YT": "French", |
| "fy": "Western Frisian", |
| "ga": "Irish", |
| "ga-GB": "Irish", |
| "gd": "Scottish Gaelic", |
| "gl": "Galician", |
| "gn": "Guarani", |
| "gu": "Gujarati", |
| "gu-IN": "Gujarati", |
| "gv": "Manx", |
| "ha": "Hausa", |
| "ha-Arab": "Hausa", |
| "ha-Arab-SD": "Hausa", |
| "ha-GH": "Hausa", |
| "ha-NE": "Hausa", |
| "he": "Hebrew", |
| "he-IL": "Hebrew", |
| "hi": "Hindi", |
| "hi-IN": "Hindi", |
| "hi-Latn": "Hindi", |
| "hr": "Croatian", |
| "hr-BA": "Croatian", |
| "hr-HR": "Croatian", |
| "ht": "Haitian", |
| "hu": "Hungarian", |
| "hu-HU": "Hungarian", |
| "hy": "Armenian", |
| "ia": "Interlingua", |
| "id": "Indonesian", |
| "id-ID": "Indonesian", |
| "ie": "Interlingue", |
| "ig": "Igbo", |
| "ii": "Sichuan Yi", |
| "ik": "Inupiaq", |
| "io": "Ido", |
| "is": "Icelandic", |
| "it": "Italian", |
| "it-CH": "Italian", |
| "it-IT": "Italian", |
| "it-SM": "Italian", |
| "it-VA": "Italian", |
| "iu": "Inuktitut", |
| "iu-Latn": "Inuktitut", |
| "ja": "Japanese", |
| "ja-JP": "Japanese", |
| "jv": "Javanese", |
| "ka": "Georgian", |
| "ki": "Kikuyu", |
| "kk": "Kazakh", |
| "kk-Arab": "Kazakh", |
| "kk-Cyrl": "Kazakh", |
| "kk-KZ": "Kazakh", |
| "kl": "Kalaallisut", |
| "km": "Central Khmer", |
| "kn": "Kannada", |
| "kn-IN": "Kannada", |
| "ko": "Korean", |
| "ko-CN": "Korean", |
| "ko-KP": "Korean", |
| "ko-KR": "Korean", |
| "ks": "Kashmiri", |
| "ks-Arab": "Kashmiri", |
| "ks-Deva": "Kashmiri", |
| "ku": "Kurdish", |
| "kw": "Cornish", |
| "ky": "Kyrgyz", |
| "la": "Latin", |
| "lb": "Luxembourgish", |
| "lg": "Ganda", |
| "ln": "Lingala", |
| "ln-AO": "Lingala", |
| "ln-CF": "Lingala", |
| "ln-CG": "Lingala", |
| "lo": "Lao", |
| "lt": "Lithuanian", |
| "lt-LT": "Lithuanian", |
| "lu": "Luba-Katanga", |
| "lv": "Latvian", |
| "lv-LV": "Latvian", |
| "mg": "Malagasy", |
| "mi": "Maori", |
| "mk": "Macedonian", |
| "ml": "Malayalam", |
| "ml-IN": "Malayalam", |
| "mn": "Mongolian", |
| "mn-Mong": "Mongolian", |
| "mn-Mong-MN": "Mongolian", |
| "mr": "Marathi", |
| "mr-IN": "Marathi", |
| "ms": "Malay", |
| "ms-Arab": "Malay", |
| "ms-Arab-BN": "Malay", |
| "ms-BN": "Malay", |
| "ms-ID": "Malay", |
| "ms-SG": "Malay", |
| "mt": "Maltese", |
| "my": "Burmese", |
| "nb": "Norwegian Bokmål", |
| "nb-SJ": "Norwegian Bokmål", |
| "nd": "North Ndebele", |
| "ne": "Nepali", |
| "ne-IN": "Nepali", |
| "nl": "Dutch", |
| "nl-AW": "Dutch", |
| "nl-BE": "Dutch", |
| "nl-BQ": "Dutch", |
| "nl-CW": "Dutch", |
| "nl-NL": "Dutch", |
| "nl-SR": "Dutch", |
| "nl-SX": "Dutch", |
| "nn": "Norwegian Nynorsk", |
| "no": "Norwegian", |
| "no-NO": "Norwegian", |
| "nr": "South Ndebele", |
| "nv": "Navajo", |
| "ny": "Chichewa", |
| "oc": "Occitan", |
| "oc-ES": "Occitan", |
| "om": "Oromo", |
| "om-KE": "Oromo", |
| "or": "Oriya", |
| "os": "Ossetian", |
| "os-RU": "Ossetian", |
| "pa": "Punjabi", |
| "pa-IN": "Punjabi", |
| "pa-Arab": "Punjabi", |
| "pa-Guru": "Punjabi", |
| "pl": "Polish", |
| "pl-PL": "Polish", |
| "ps": "Pashto", |
| "ps-PK": "Pashto", |
| "pt": "Portuguese", |
| "pt-AO": "Portuguese", |
| "pt-BR": "Portuguese", |
| "pt-CH": "Portuguese", |
| "pt-CV": "Portuguese", |
| "pt-GQ": "Portuguese", |
| "pt-GW": "Portuguese", |
| "pt-LU": "Portuguese", |
| "pt-MO": "Portuguese", |
| "pt-MZ": "Portuguese", |
| "pt-PT": "Portuguese", |
| "pt-ST": "Portuguese", |
| "pt-TL": "Portuguese", |
| "qu": "Quechua", |
| "qu-BO": "Quechua", |
| "qu-EC": "Quechua", |
| "rm": "Romansh", |
| "rn": "Rundi", |
| "ro": "Romanian", |
| "ro-MD": "Romanian", |
| "ro-RO": "Romanian", |
| "ru": "Russian", |
| "ru-BY": "Russian", |
| "ru-KG": "Russian", |
| "ru-KZ": "Russian", |
| "ru-MD": "Russian", |
| "ru-RU": "Russian", |
| "ru-UA": "Russian", |
| "rw": "Kinyarwanda", |
| "sa": "Sanskrit", |
| "sc": "Sardinian", |
| "sd": "Sindhi", |
| "sd-Arab": "Sindhi", |
| "sd-Deva": "Sindhi", |
| "se": "Northern Sami", |
| "se-FI": "Northern Sami", |
| "se-SE": "Northern Sami", |
| "sg": "Sango", |
| "si": "Sinhala", |
| "sk": "Slovak", |
| "sk-SK": "Slovak", |
| "sl": "Slovenian", |
| "sl-SI": "Slovenian", |
| "sn": "Shona", |
| "so": "Somali", |
| "so-DJ": "Somali", |
| "so-ET": "Somali", |
| "so-KE": "Somali", |
| "sq": "Albanian", |
| "sq-MK": "Albanian", |
| "sq-XK": "Albanian", |
| "sr": "Serbian", |
| "sr-RS": "Serbian", |
| "sr-Cyrl": "Serbian", |
| "sr-Cyrl-BA": "Serbian", |
| "sr-Cyrl-ME": "Serbian", |
| "sr-Cyrl-XK": "Serbian", |
| "sr-Latn": "Serbian", |
| "sr-Latn-BA": "Serbian", |
| "sr-Latn-ME": "Serbian", |
| "sr-Latn-XK": "Serbian", |
| "ss": "Swati", |
| "ss-SZ": "Swati", |
| "st": "Southern Sotho", |
| "st-LS": "Southern Sotho", |
| "su": "Sundanese", |
| "su-Latn": "Sundanese", |
| "sv": "Swedish", |
| "sv-AX": "Swedish", |
| "sv-FI": "Swedish", |
| "sv-SE": "Swedish", |
| "sw": "Swahili", |
| "sw-CD": "Swahili", |
| "sw-KE": "Swahili", |
| "sw-TZ": "Swahili", |
| "sw-UG": "Swahili", |
| "ta": "Tamil", |
| "ta-IN": "Tamil", |
| "ta-LK": "Tamil", |
| "ta-MY": "Tamil", |
| "ta-SG": "Tamil", |
| "te": "Telugu", |
| "te-IN": "Telugu", |
| "tg": "Tajik", |
| "th": "Thai", |
| "th-TH": "Thai", |
| "ti": "Tigrinya", |
| "ti-ER": "Tigrinya", |
| "tk": "Turkmen", |
| "tl": "Tagalog", |
| "tn": "Tswana", |
| "tn-BW": "Tswana", |
| "to": "Tonga", |
| "tr": "Turkish", |
| "tr-CY": "Turkish", |
| "tr-TR": "Turkish", |
| "ts": "Tsonga", |
| "tt": "Tatar", |
| "ug": "Uyghur", |
| "uk": "Ukrainian", |
| "uk-UA": "Ukrainian", |
| "ur": "Urdu", |
| "ur-IN": "Urdu", |
| "ur-PK": "Urdu", |
| "uz": "Uzbek", |
| "uz-Arab": "Uzbek", |
| "uz-Cyrl": "Uzbek", |
| "uz-Latn": "Uzbek", |
| "ve": "Venda", |
| "vi": "Vietnamese", |
| "vi-VN": "Vietnamese", |
| "vo": "Volapük", |
| "wa": "Walloon", |
| "wo": "Wolof", |
| "xh": "Xhosa", |
| "yi": "Yiddish", |
| "yo": "Yoruba", |
| "yo-BJ": "Yoruba", |
| "za": "Zhuang", |
| "zh": "Chinese", |
| "zh-CH": "Chinese", |
| "zh-TW": "Chinese", |
| "zh-Hans": "Chinese", |
| "zh-Hans-HK": "Chinese", |
| "zh-Hans-MO": "Chinese", |
| "zh-Hans-MY": "Chinese", |
| "zh-Hans-SG": "Chinese", |
| "zh-Hant": "Chinese", |
| "zh-Hant-HK": "Chinese", |
| "zh-Hant-MO": "Chinese", |
| "zh-Hant-MY": "Chinese", |
| "zh-Latn": "Chinese", |
| "zu": "Zulu", |
| "zu-ZA": "Zulu", |
| } |
| -%} |
| {{ bos_token }} |
| {%- if (messages[0]['role'] != 'user') -%} |
| {{ raise_exception("Conversations must start with a user prompt.") }} |
| {%- endif -%} |
| {%- for message in messages -%} |
| {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%} |
| {{ raise_exception("Conversation roles must alternate user/assistant/user/assistant/...") }} |
| {%- endif -%} |
| {%- if (message['role'] == 'assistant') -%} |
| {%- if message['content'] is none or message['content'] is not string -%} |
| {{ raise_exception("Assistant role must provide content as a string") }} |
| {%- endif -%} |
| {{ '<start_of_turn>model\n'}} |
| {{ message["content"] | trim }} |
| {%- elif (message['role'] == 'user') -%} |
| {%- if message['content'] is none or message['content'] is not iterable or message['content'] | length != 1 -%} |
| {{ raise_exception( |
| "User role must provide `content` as an iterable with exactly one item. That item must be a " + |
| "`mapping(type:'text' | 'image', source_lang_code:string, target_lang_code:string, " + |
| "text:string | none, image:string | none)`." |
| ) }} |
| {%- endif -%} |
| {%- set content = message["content"][0] -%} |
| {%- set source_lang_code = content["source_lang_code"] | replace("_", "-") -%} |
| {%- set source_lang = languages[source_lang_code] -%} |
| {%- set target_lang_code = content["target_lang_code"] | replace("_", "-") -%} |
| {%- set target_lang = languages[target_lang_code] -%} |
| {{ '<start_of_turn>user\nYou are a professional ' + source_lang + ' (' + source_lang_code + ') to ' + |
| target_lang + ' (' + target_lang_code + ') translator. Your goal is to accurately convey the meaning and ' |
| 'nuances of the original ' + source_lang + ' text while adhering to ' + target_lang + ' grammar, ' |
| 'vocabulary, and cultural sensitivities.\n' |
| }} |
| {%- if content["type"] == 'text' -%} |
| {{ |
| 'Produce only the ' + target_lang + ' translation, without any additional explanations or ' + |
| 'commentary. Please translate the following ' + source_lang + ' text into ' + target_lang + ':\n\n\n' + |
| content["text"] | trim |
| }} |
| {%- elif content["type"] == 'image' -%} |
| {{ |
| 'Please translate the ' + source_lang + ' text in the provided image into ' + target_lang + '. ' + |
| 'Produce only the ' + target_lang + ' translation, without any additional explanations, ' + |
| 'alternatives or commentary. Focus only on the text, do not output where the text is located, ' + |
| 'surrounding objects or any other explanation about the picture. Ignore symbols, pictogram, and ' + |
| 'arrows!\n\n\n<start_of_image>' |
| }} |
| {%- else -%} |
| {{ raise_exception("User role `content` can contain either `text` or `image` data.") }} |
| {%- endif -%} |
| {%- else -%} |
| {{ raise_exception("Conversations must only contain user or assistant roles.") }} |
| {%- endif -%} |
| {{ '<end_of_turn>\n' }} |
| {%- endfor -%} |
| {%- if add_generation_prompt -%} |
| {{'<start_of_turn>model\n'}} |
| {%- endif -%} |
| |