RustSTT

Розпізнавання мови в реальному часі на Rust: потік через WebSocket, кілька архітектур розпізнавання, один сервіс, що працює на CPU, CUDA або Metal.

Належність
Належить Red Sentra.
Доступність
Пропонується комерційно через власний сайт. Вихідний код приватний.
Стек
Rust / WebSocket / CUDA / Metal
Публічна вітрина (відкриється в новій вкладці)
Знімок публічного сайту RustSTT.

Задача

Транскрипція, що приходить, коли розмова вже пішла далі, не є реальним часом. Цільове залізо теж різне: десь є GPU, десь Apple silicon, а десь нічого, і сервіс має бути вартим запуску скрізь.

Система

Потоковий сервіс розпізнавання на Rust. Аудіо надходить через WebSocket, а результати повертаються, поки мовлення ще триває. Кілька архітектур розпізнавання стоять за одним інтерфейсом, і той самий сервіс працює на CPU, CUDA або Metal залежно від машини.

Моя роль

Системна інженерія та продуктивність: потоковий шлях, абстракція над обчислювальними бекендами й передбачувана затримка під навантаженням.

Найскладніше

Один сервіс, три дуже різні обчислювальні цілі й бюджет затримки, який не рухається. Те, що швидко на CUDA GPU, не швидко на CPU ноутбука, а потоковий шлях має лишатися передбачуваним скрізь.

Архітектурні рішення

  1. Один інтерфейс перед кількома архітектурами розпізнавання. Клієнти просять транскрипцію, а не конкретну модель, тож рушій можна додати чи замінити, не чіпаючи транспорт.
  2. Потік через WebSocket замість запиту й відповіді. Аудіо йде безперервно, а часткові результати повертаються, поки людина ще говорить, і лише так результат корисний під час розмови.
  3. Обчислювальні цілі це вибір розгортання, а не форк. CPU, CUDA і Metal стоять за однією абстракцією, тож одна кодова база обслуговує і ноутбук, і GPU-сервер.

Поточний стан

У продакшн-використанні. Комерційні запити йдуть через власний сайт проєкту.