Browser batch ASR — Silero Web
Поставка 2.0.0 завершена. Пять CI checks PASS; пять сервисов 1.0.0.1040; физический захват и два архивных повтора проверены. Актуальный итог — TEN-REMOVAL.md.
По решению пользователя поддержка TEN полностью удалена. Текущий выпуск и его отдельные уровни проверки: TEN-REMOVAL.md, машиночитаемый отчёт.
История приёмки до удаления TEN
Browser batch ASR — приёмка 1.9.3 и коррекция TEN 1.9.4
Состояние на 2026-10-28T20:24:58.267513+00:00: коррекция TEN 1.9.4 поставлена, расширение перезагружено пользователем. Все пять сервисов работают на 1.0.0.1039, приём открыт. Три новых физических потока принимают аудио. Фон первых двух минут не создал фраз; контрольная команда дала два правильных текста и один отличающийся. Проверка причины и общая приёмка продолжаются.
Реализация
Один исходный PCM Chrome поступает в архив и распознавание. Silero Web либо TEN работает в Worker панели; выбор независим между вкладками. После паузы отправляется готовая фраза, максимум 30 секунд. Серверный повторный VAD, growing-window, partial/refine и фильтрация текста по оценкам исключены из этого контура. Сохраняются проверка целостности, границы, ограничения очередей и владельца.
В 1.9.3 удалён дополнительный счётчик отправленных байтов, ожидавший PONG, и периодический flush. Лимит реального WebSocket-буфера и финальное подтверждение сохранены. Воспроизведение старой ошибки и 35 тестов NATS/session прошли. Связь именно с задержкой PONG в двух пользовательских сбоях вероятна, но исходные счётчики там не записывались; browser abort с audio_queue_overflow подтверждён журналом.
Gateway: исправлены зависимости PyAV/numpy для подготовки архивного PCM, сохранение первичной ошибки после cleanup и явная конфигурация ASR namespace. Адрес архивного повтора теперь должен совпадать с адресом Core/Ingress; повтор физической фразы проверен после поставки: текст, параметры, source PCM и model input совпали с исходной командой. Результат через 0,82 с, модель — 155,58 мс. Доказательство.
Исходники, образы и CI
- Текущие Front/Gateway/Core/Ingress/Agent: source
89b31b337e4d71cb56e4a0cb597487ffdb61179a, runtime1.0.0.1039, все1/1 running. Runtime, поставка backend, поставка Front. Пять реальных CI checks pipeline 5498 PASS. - Следующие версии и jobs 1.9.3 сохранены как история до 1.9.4:
- Реально поставленный Front:
e4ffa860a6ad334a499cdb20b11df149bee21f1c, digestdeb2f59174b5f7f563a8219c9210440446bcb9e8756b92dd08b2eb717bd71ef0, job 26089, 56,44 с. - Поставленный Gateway:
c49f0949ccaccbb997405e7c91a3310d4b3df261, digestd9140c1c3e25fc4fc95dfc2d96e6cf22fcfa0e9803d6a3d7340506906d874b2a, job 26191, 46,61 с. - ASR source:
d6e12511bd3ee26bf4208192607ac70b58e9049a. Core/Ingress/Agent/LLM application source:f753a709a009ef6630180f155d58b8557404c4bc. - Расширение 1.9.3: manifest/package evidence. ID, permissions, CSP и путь установки сохранены.
- Полная регрессия общего контракта — pipeline 5473, пять checks. Адресные проверки последующих исправлений — 5492–5497. В 5495 frontend suite прошёл; в 5496 реальные Python, browser NATS, frontend и Ruby прошли, два integration fixtures требовали явного ASR prefix. В 5497 исправленная integration suite прошла; остальные checks — явные пропуски неизменённых входов.
- Счёт строк: source-line-counts.json. Front без vendor: +2201 / −3162 (−961); ASR: +975 / −6136 (−5161). Vendor/LICENSE: +6598 строк и два бинарных файла. Это сравнение со стартовыми SHA плана, не размер последнего исправления.
Проверенные результаты
24 прогона: 3 размеченные записи × 2 VAD × 4 модели. WER/CER = 0 на этом ограниченном наборе; исходные диапазоны одинаковы между моделями. У Turbo/Russian/GigaAM дополнительно совпали хеши model input; LinTO этот хеш не возвращает. Это не общий языковой benchmark.
Физическая команда «Ответь одним словом. Проверка.» появилась при продолжающемся захвате. Исходный PCM и архив совпали: 280320 байт, 48 кГц, SHA-256 c6edc86b0d0eb07908b8405fbef7f833e1e856b54a8331f48550bdfe36c90222. Чистый вызов модели — 151,77 мс, очередь — 292,70 мс; пауза — 480 мс. Прослушивание выделений 90 мс и 1 с проверено отдельными JSON. Часы браузера и сервера расходятся, поэтому разность их timestamp не выдана за end-to-end latency.
После обновления Front повторная контрольная тишина 10 с для обоих VAD дала ноль фраз и ноль запусков модели. На обычной записи оба VAD дали правильный одинаковый текст. Обе темы проверены на фактической ширине 390 px, scrollWidth = 390.
Физический прогон 1.9.3 и TEN
- Monitor после остановки: 0 активных, все три архива Полная. Silero — 1953,342 и 1950,048 с; TEN — 543,181 с. Снимок.
- Команда «Ответь одним словом. Проверка.» пришла во все три потока до выключения микрофонов. Активный архив TEN повторён успешно: исходный PCM, вход модели и слова совпали. Модель: исходный вызов 152,802 мс, повтор 153,099 мс. Повтор.
- TEN выдавал ложные фразы на тихом фоне. Это не подтверждённая ошибка WASM-обвязки: официальная нативная библиотека и WASM на восьми одинаковых входах отличаются максимум на 2,68×10⁻⁷ по вероятности. Сравнение.
- Настройка 0,85/0,50 с прежним pre-roll 200 мс теряет начало некоторых слов; она отвергнута. При pre-roll 1000 мс слова четырёх размеченных примеров сохраняются на всех четырёх моделях: 16/16, WER/CER 0 на этом малом наборе. Четыре независимых участка фона (128 с) не создают фраз. Качество, границы.
- Подготовленная 1.9.4 меняет только параметры TEN, ограниченный серверный допуск pre-roll и тесты: +40/−14 строк. Silero, архивный PCM, ASR scores и фильтрация текста не меняются. Расширение установлено по прежнему пути и перезагружено пользователем; ID, permissions и CSP сохранены. 43 frontend unit tests, 5 batch tests и типизация PASS.
- Локальная проверка нового Worker через CDP не выполнена: сохранённое разрешение браузера запрещает CDP на localhost:5173. Это не считается PASS. Проверка после поставки выполняется обычным UI.
Измерения
Один исходный синтетический PCM длительностью 10,901 с, Whisper Turbo: старое наблюдение сопоставлено с медианой трёх новых тёплых повторов. Старый вариант использовал server VAD и подачу 1×, новый — browser VAD; это наблюдение полного пользовательского пути, а не изолированный benchmark модели.
| Показатель | Было | Стало | Разница | Изменение |
|---|---|---|---|---|
| Полный запуск Compare | 13210,5 мс | 3816,1 мс | −9394,4 мс | −71,1% |
| Чистое распознавание | 207,27 мс | 197,81 мс | −9,46 мс | −4,6% |
| PCM-пакеты browser → ingress | 511 | 121 | −390 | −76,3% |
| Исходные PCM-байты | 1046528 | 1046528 | 0 | 0% |
Новые полные времена: 5043,1 / 3816,1 / 2934,4 мс. Разницу чистого времени модели нельзя приписывать оптимизации: границы и состояние прогрева отличаются. Первый холодный запуск Silero потребовал 40741,7 мс подготовки VAD; это отдельная задержка, не время Whisper. Внутренняя передача одной фразы: 1 commit RPC, 5 бинарных пакетов вместе с begin/commit, 319744 байта PCM. Сопоставимый старый счётчик внутренних RPC отсутствует. Машиночитаемые значения.
Ресурсы и оставшаяся приёмка
Локальный 30-минутный прогон настоящих AudioWorklet/VAD с тестовым транспортом: 365 фраз, 30 перезапусков, 3 Worker/3 AudioContext во время работы и 0/0 после закрытия, heap около 2 МБ. Он не заменяет production mixed soak.
Предыдущий production-прогон трёх микрофонов не прошёл: один поток длился 2799 с, два других — 932 и 1352 с. Длительность наблюдения Monitor ошибочно не должна считаться длительностью всех потоков. В новом прогоне 1.9.3 два Silero прошли >30 минут, TEN остановлен через 9 минут из-за качества; это также не PASS трёх потоков.
Осталось: разобраться с отличающейся физической контрольной фразой, новая 30-минутная смешанная нагрузка трёх потоков, удерживаемая память и endpoint median/p95 на одной шкале времени. Неизвестные значения не заменены нулями.
Подробный статус — acceptance.json. Старые записи восстановления LinTO и предыдущих попыток сохранены в README.md.before-1.9.3; они не описывают текущее runtime-состояние.