Голосовые системы

Chat Agent 2.4.3 — проверка после удаления Core

Исправлены 12 отдельных дефектов: 9 серверных и 3 клиентских. Дефекты воспроизведены адресными тестами либо контрольным запросом. Это не утверждение, что все они одновременно происходили в production.

Исправления

№ Где Дефект и результат
1 Сервер: отправка ASR Пустой TimeoutError давал пустой код. Теперь asr_submit_timeout; другой пустой сбой — asr_submit_failed.
2 Сервер: измерение PCM Отказ необязательного измерения прерывал отправку фразы. Теперь потеря измерения учитывается, распознавание продолжается.
3 Сервер: повтор фразы Диагностический повтор терял исходные метаданные Silero. Сохраняется исходный VAD.
4 Сервер: результат повтора Ошибка модели могла завершиться состоянием успеха. Теперь error сохраняется при finish.
5 Сервер: доставка повтора Сбой уведомления оставлял уже полученный результат в pending. Результат фиксируется до отправки, доставка ограничена по времени и сообщает отдельную ошибку.
6 Сервер: запуск аудио Ожидающий lock START мог запустить уже отменённый поток. После lock повторно проверяется отмена.
7 Сервер: очередь UI Переполненная очередь незаметно удаляла другой окончательный результат. Теперь новый результат получает явный отказ.
8 Клиент: микрофоны Автоматическое переключение и ручной выбор могли перезаписать друг друга. Сохранение выполняется последовательно.
9 Клиент: захват Уже завершённая дорожка переводила UI в «Слушаю». Теперь запуск отклоняется, ресурсы освобождаются.
10 Клиент: Opus Ожидание очереди завершалось после любого dequeue. Теперь ожидается реальный порог; отмена снимает обработчик.
11 Сервер: Monitor SQL Неудачный план перебирал 962 владельца для 8000 обычных событий: 7 696 000 проверок. Пустой ключ фразы отсеивается до сканирования; большие тела обычных команд не разбираются. Лимиты не увеличены.
12 Сервер: Agent После неизвестного результата JS агент повторял вызовы заблокированного документа, затем показывал лимит инструментов. Теперь останавливается на effect=unknown или browser_script_busy, сохраняя первичную причину.

Защитная блокировка документа при неизвестном результате JavaScript сохранена. Нельзя считать любое исключение Chrome доказательством отсутствия побочных действий.

Исходники

База: b2baf9a34884612f11a4375333359b2647d2f581.

  • MR !51: десять исходных исправлений; merge 68985092028b74bbd3501fa638beb0a384543e2d.
  • MR !52: ограничение чтения Monitor; merge 3075e61a8c138f70c548a4b0715ffb86415a95f6.
  • MR !53: остановка небезопасных повторов; merge d1069a883fb0a8cddc208331763f20a831971cc9.

Все три MR в main. Общая разница: 25 файлов, +208 / −33 строки с тестами и номером пакета. CI, стек, ASR, модели и GPU не менялись. Основная пользовательская копия сохранена; работа выполнена в отдельном checkout одним writer.

Адресные проверки

  • На исходном коде воспроизведены 7 серверных и 3 клиентских сбоя; после правок — 47 Python-тестов и 90 frontend-тестов прошли.
  • Типизация, Front build и ZIP расширения прошли. После уточнений повторялись затронутые группы.
  • Monitor: 34 PostgreSQL integration-теста прошли; после окончательного уточнения — две проверки длинной сессии/большого тела. Несколько локальных NATS-проверок были пропущены; штатный CI выполняет их с NATS.
  • Agent: оба варианта лишнего повтора сначала воспроизведены; после правки 17 тестов прошли.
  • git diff --check пройден.

CI

  • Main 5734: 567 frontend-тестов, 246 Python-тестов и 10 subtests прошли; 136 integration-тестов были пропущены именно в Python job, для них есть отдельная job. npm audit: 0 vulnerabilities.
  • Integration на 5734 дважды выявила SQL statement_timeout длинной сессии. Это устранено MR !52, без увеличения тайм-аута.
  • Все пять checks main 5739 и ветки MR !53 (5740) прошли. Все пять checks итогового main 5741 также прошли: integration 29334 один раз не дождалась NATS-пакета за 2 с; единственный повтор 29379 прошёл. Код и лимиты не менялись.
  • Измерение 1472 мс относится к одному локальному плохому SQL-плану; это не p95 и не обещание ускорения каждого запроса.

Расширение и реальная панель

Установлен пакет 2.4.3, пользователь подтвердил активацию. Путь: локальный источник; IDdbcdiabfkimnhbkkhkikgfapnabifmjf`. Key, permissions и CSP сохранены.

ZIP: 25 файлов, 20 609 249 байт, SHA-256 665506829ad7db1bb7c05a4fc0c690e8c6fee2b39bac09783925a3e844827928.

Настройки и обновление списка устройств работают. После обновления документа проверен один run_js, читающий только h1: два вызова модели, один инструмент, ответ Form Filler: Test Form - All Fields. Поля формы не читались и не изменялись, микрофон не включался инструментом.

Подтверждение работы 2.4.3. Проверки тем и настроек сохранены отдельными скриншотами; старые скриншоты 2.4.2 не выдаются за проверку новой версии.

Первый живой запрос выявил неверный JS модели (await в синхронном callback) и лишние повторы Agent. Исправление № 12 предотвращает повторы после неизвестного результата; оно не гарантирует, что модель всегда генерирует корректный код.

Работающие сервисы

Поставка завершена штатными адресными component jobs. Предыдущие digest сохранены в images-before.json; итоговые — в images-final.json. Совпадение проверено между CI image verification и свежими строками Insight. Все четыре компонента 1/1 running. Release-проверка дополнительно проверяет завершённый rollout, фактический image ID и Docker health, если он определён.

Проверка нового Gateway/Ingress: одна сохранённая Opus-фраза 3,784 с; текст совпал с исходным, исходный Silero VAD сохранился. Один вызов GigaAM Large: 46,89 мс чистого распознавания; очередь 0,525 мс. Диапазон 16256–76800 при 16 кГц, проверено 363264 байта декодированного PCM исходной частоты. Состояние stopped, final получен, ошибок нет, резерв освобождён. Второй постоянной копии аудио не создавалось.

Компонент Версия сборки Source SHA Refresh job
src_api_gateway 1.0.1154 3075e61a 29322
audio_ws_ingress 1.0.1150 68985092 29209
src_front 1.0.1151 68985092 29258
src_agent 1.0.1156 d1069a88 29378

Финальная проверка: Gateway и Ingress draining=false, chat_requests=0, uncertain_admissions=0, audio_connections=0, replay_reservations=0. Agent: ok/pg_ready/owner=true, active/waiting/admissions/records/endpoints=0. LLM: ok=true. Ingress: chat_nats/asr_nats=true, один ASR subscription, два существующих diagnostic adapters. Core отсутствует; всего 11 сервисов стека.

Во время поставки панель потеряла канал; штатная кнопка «Повторить» восстановила соединение. Обновления страницы или расширения для этого не потребовалось. После обновления Agent панель получила «проверка»: один вызов модели, ноль инструментов. Итоговый скриншот.

Границы проверки

Живая речь и отключение физических микрофонов не проводились. Гонки, переполнение очереди, отказ доставки и неизвестный результат проверены адресными тестами; намеренно вызывать эти аварии в пользовательском сеансе после поставки не требовалось. Короткий ASR-повтор подтверждает этот образец, а не качество распознавания в целом. Новые ошибки модели в сгенерированном JS возможны; защита от повторного действия с неизвестным результатом сохранена.

Исходник

Скачать Markdown · К материалам исследования