Провайдеры и вендоры
24 провайдера, поля каждого из них и как читать языковую таблицу провайдера.
curl "https://languages.service.custom.mt/v1/providers"
curl "https://languages.service.custom.mt/v1/providers/deepl_api"
curl "https://languages.service.custom.mt/v1/providers/deepl_api/languages?effective=true"
Каталог
Коды провайдеров — те же, что в provider_credentials. Один идентификатор резолвит кред там и код языка здесь; вызывающему не нужно переводить между двумя схемами именования.
| Вендор | Провайдеры |
|---|---|
| OpenAI | openai_api |
| Anthropic | anthropic_api |
| Google Cloud | google_translate, gemini_api |
| Microsoft Azure | microsoft_translator |
| Amazon Web Services | amazon_translate |
| DeepL | deepl_api |
| Translated | modernmt_api, lara_api |
| LanguageWire | languagewire_api |
| SYSTRAN | systran_translate |
| Tencent | tencent_transmart |
| Alibaba Cloud | alibaba_translate |
| Baidu | baidu_translate |
| Naver | papago_translate |
| Supertext | supertext_translate |
| XL8 | xl8_translate |
| Tarjama | tarjama_mt |
| Tahrirchi | tilmoch_api, sayqalchi_api |
| Widn.AI | widn_tower_anthill, widn_tower_sugarloaf, widn_tower_vesuvius |
| Internal | custom_finetuned_mt |
Что несёт строка провайдера
| Поле | Значение |
|---|---|
code |
канонический код провайдера, общий с provider_credentials |
name |
отображаемое название |
vendor_code, vendor_name |
компания, стоящая за ним |
category |
mt, ai или custom_mt |
fallback_policy |
во что резолвится ненастроенный региональный язык — см. Fallback Policies |
in_credentials_catalog |
false, когда provider_credentials ещё не содержит этого провайдера |
is_active |
false для провайдеров, которые сейчас не используются |
aliases |
все другие идентификаторы, адресующие этого провайдера |
notes |
свободный текст: особенности набора кодов вендора, где они важны |
configured_languages |
сколько языков имеют явную строку |
aliases и notes возвращает GET /v1/providers/{code}; список возвращает только поля-сводку.
Info
in_credentials_catalog
False означало бы провайдера, чьи коды здесь резолвятся, но которого нет в provider_credentials — резолвить можно, контракта на креды за ним нет. Сегодня в таком состоянии нет ни одного; поле остаётся, чтобы — если такой появится — это было видно, а не выяснилось из упавшей задачи.
Алиасы провайдера
Провайдер откликается не только на свой код. aliases держит каждый другой идентификатор, который его адресует, — короткое имя вроде deepl и любой более длинный идентификатор, который вызывающие, как известно, шлют для этого движка:
curl ".../v1/resolve?provider=deepl&language=zh-CN"
# → { "provider": "deepl_api", "code": "ZH-HANS", … }
В ответе всегда возвращается канонический код provider, какой бы алиас вы ни прислали. Именно его нужно хранить.
Один провайдер покрывает все модели, которые обслуживает тот же эндпоинт вендора, потому что поддержка языков — это свойство эндпоинта, а не модели за ним. provider_credentials держит модель как поле model_id под одним кредом, так что один провайдер здесь соответствует одному креду там.
Явное против эффективного
# только пары, которые кто-то настроил
curl ".../v1/providers/deepl_api/languages"
# все языки, включая фолбэки — то, что провайдер действительно получит
curl ".../v1/providers/deepl_api/languages?effective=true"
Первая команда возвращает для DeepL 127 языков — явно настроенные пары, которые поддерживаются. effective=true расширяет до 247 языков, которые провайдер реально может получить с учётом фолбэков; язык без явной строки — не пробел: базовые отвечают собственным кодом, а региональные фолбэчатся по Fallback Policies. Каждая запись несёт тот же match, что и эндпоинт резолвинга, так что настроенные ответы отличимы от выведенных.
supported_only по умолчанию true. Передайте supported_only=false, чтобы увидеть и пары, зафиксированные как нерабочие — вместе с effective=true это весь каталог, 503 строки.
Как выбирается исходящий код
Для любой пары (провайдер, язык) есть ровно один код — выбранный один раз и зафиксированный, а не во время запроса. Где несколько написаний одного языка могли бы быть отправлены, побеждает:
- написание, задокументированное для этого провайдера, если такое есть,
- далее то, что равно собственному каноническому коду языка — когда конкурирует несколько написаний и одно из них то, как мы уже называем язык, отправлять другое значит расходиться без причины,
- далее самое каноническое написание BCP-47 (
es-419надES-LA).
В отличие от канонического кода языка, здесь более короткий тег никогда не имеет преимущества сам по себе. Если API провайдера хочет zh-Hans и только zh-Hans — это факт, и правило 2 его не перекрывает. Каждое написание-проигравший остаётся достижимым как входящий алиас.
Далее
- Fallback Policies — что происходит, когда ничего не настроено
- Resolution Ladder — полный порядок поиска