RustSTT
Распознавание речи в реальном времени на Rust: поток через WebSocket, несколько архитектур распознавания, один сервис, работающий на CPU, CUDA или Metal.
- Принадлежность
- Принадлежит Red Sentra.
- Доступность
- Предлагается коммерчески через собственный сайт. Исходный код приватный.
- Стек
- Rust / WebSocket / CUDA / Metal

Задача
Транскрипция, приходящая, когда разговор уже ушёл дальше, не является реальным временем. Целевое железо тоже разное: где-то есть GPU, где-то Apple silicon, а где-то ничего, и сервис должен быть достоин запуска везде.
Система
Потоковый сервис распознавания на Rust. Аудио поступает через WebSocket, а результаты возвращаются, пока речь ещё идёт. Несколько архитектур распознавания стоят за одним интерфейсом, и тот же сервис работает на CPU, CUDA или Metal в зависимости от машины.
Моя роль
Системная инженерия и производительность: потоковый путь, абстракция над вычислительными бэкендами и предсказуемая задержка под нагрузкой.
Самое сложное
Один сервис, три очень разные вычислительные цели и бюджет задержки, который не двигается. То, что быстро на CUDA GPU, не быстро на CPU ноутбука, а потоковый путь должен оставаться предсказуемым везде.
Архитектурные решения
- Один интерфейс перед несколькими архитектурами распознавания. Вызывающие просят транскрипцию, а не конкретную модель, поэтому движок можно добавить или заменить, не трогая транспорт.
- Поток через WebSocket вместо запроса и ответа. Аудио идёт непрерывно, а частичные результаты возвращаются, пока человек ещё говорит, и только так результат полезен во время разговора.
- Вычислительные цели это выбор развёртывания, а не форк. CPU, CUDA и Metal стоят за одной абстракцией, поэтому одна кодовая база обслуживает и ноутбук, и GPU-сервер.
Текущее состояние
В продакшн-использовании. Коммерческие запросы идут через собственный сайт проекта.