Зачем мы сделали свой переводчик

На macOS 26 любой перевод с украинского или на украинский через встроенный перевод Apple ронял системную службу перевода. На этой неделе мы перестали от неё зависеть: приложение переводит своими моделями, прямо на вашем Маке.

Что сломалось

Мы разобрались 12 августа. На macOS 26 (проверяли на 26.5.2) любой перевод, где с одной стороны украинский, обрывает системную службу translationd. После этого macOS не запускает её заново до 20 минут. Всё это время не переводится ни одна пара языков, ни в одном приложении на компьютере, включая русский и английский. Воспроизвести это можно и без нашего приложения: выделить текст, нажать правую кнопку, выбрать «Перевести».

На macOS Sequoia 15 тот же перевод работает, так что это сбой именно macOS 26, а не один неудачный Мак. Он воспроизвёлся и на чужом компьютере. Обычных подозреваемых мы проверили: файлы украинской модели целы, а очистка кэшей, перезагрузка и смена режима перевода ничего не меняли. Отчёт в Apple мы отправили, но украинский — центр того, что делает приложение, и ждать мы не могли.

Хуже всего побочный эффект. Украинский и так не работал, но одна украинская попытка заодно выключала русский и английский на двадцать минут.

Что мы сделали

Мы добавили собственный переводчик. Он использует открытые модели перевода, а запускает их движок внутри приложения. Первая версия знает английский, русский и украинский, а хранилище рассчитано на десять языков.

Словари скачиваются по одному на направление, только для тех языков, которые вы выбрали, с cdn.verbaide.com. Одно направление лежит внутри приложения, поэтому перевод работает с первого запуска: с русского и украинского на английский. Все остальные направления, включая обратный путь с английского на русский и украинский, скачиваются по запросу.

Для некоторых пар прямой модели нет — например, для украинского и русского. Там мы идём через английский, и только когда прямого пути нет: каждая лишняя пересадка может испортить смысл.

Что мы замерили

Сначала мы попробовали класс моделей поменьше и полегче. Из 20 тестовых переводов он испортил 8, а в шести пропали целые предложения. Из «Привет, как дела? Сегодня хорошая погода, и я хочу пойти на прогулку» осталось только «як справи? і я хочу піти на прогулянку». Это потерянный текст, а не обмен скорости на качество, поэтому мы такую модель отвергли. Класс побольше не потерял ни одного предложения.

На этом Маке наш переводчик тратил 153 мс на фразу, а переводчик Apple — 176 мс. Это один компьютер, а не тест на все случаи, но он говорит, что переход ничего не стоит по скорости.

Переводчик Apple остался в приложении запасным для тех языков, где он работает. Украинский через него не идёт никогда. Подробности о языках и загрузках — в разделе языки и модели.

Ещё из блога