внутренняя модель перестроена вокруг аудиозаписи
- audiorecords вместо transcribe_jobs: приложения (texts, structures, recognitions, record_events, topics) живут своими коллекциями, ссылки на исходник и на приведённую копию перестали переставляться - рубеж называет достигнутое, отказ стал признаком остановки с причиной, а сторожей стало двое: число отказов и время в рубеже - воркеры потеряли специализацию, их число задаётся [pipeline] workers, шаг выбирается по рубежу, а захват отдаёт идентификатор и признак захвата
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Ответ распознавателя хранится дословно, двоичной формой и вложением
|
||||
|
||||
- **Дата:** 2026-08-14
|
||||
- **Источник:** openspec/changes/archive/2026-08-14-record-centric-model/design.md,
|
||||
раздел «Сырой ответ провайдера хранится вложением, а не колонкой»
|
||||
|
||||
## Решение
|
||||
|
||||
Ответ SpeechKit сохраняется целиком — сообщения потока подряд, каждое своей
|
||||
двоичной записью с длиной впереди, — и лежит **вложением** коллекции попыток
|
||||
распознавания, а не колонкой.
|
||||
|
||||
## Почему
|
||||
|
||||
Цитата источника:
|
||||
|
||||
> Хранится он вообще потому, что **результат операции у провайдера не
|
||||
> переспрашивается**. Отвергнутый вариант — не хранить и разобрать на лету:
|
||||
> дешевле сегодня, но связь реплики с говорящим мы строить пока не умеем, и
|
||||
> когда научимся, архив пересчитать будет не из чего, а повторная операция стоит
|
||||
> денег за каждую запись.
|
||||
|
||||
Вложением, а не колонкой:
|
||||
|
||||
> Ответ на многочасовую запись — мегабайты. Хранилище читает запись целиком, а
|
||||
> шаг опроса читает строку попытки раз в несколько секунд: положенный колонкой,
|
||||
> ответ ехал бы в память при каждом опросе — тот же промах, что расшифровка в
|
||||
> перечне колонок захвата сегодня.
|
||||
|
||||
Двоичной формой, а не текстовой, — решение ревью кода того же изменения. Замер:
|
||||
текстовое представление собирается по нашей скомпилированной схеме и **молча
|
||||
выбрасывает поля, которых в ней нет**, а провайдер добавляет их без
|
||||
предупреждения. Двоичная форма неизвестные поля переносит: они переживают запись
|
||||
и чтение и станут читаемыми, когда схема обновится. Ради этого архив и заводился.
|
||||
|
||||
## Последствия
|
||||
|
||||
- `+` архив пересчитывается из сохранённого без единого рубля: связь реплики с
|
||||
говорящим станет доступна, когда мы научимся её читать.
|
||||
- `+` шаг опроса читает строку попытки, не поднимая мегабайты в память.
|
||||
- `−` **формат файла на диске объявлен необратимым**: сохранённое не читается
|
||||
глазами и не разбирается ничем, кроме нашего же кода, а прочесть архив без
|
||||
сервиса нельзя вовсе.
|
||||
- `−` каталог данных растёт быстрее прежнего: ответ многословнее самой
|
||||
расшифровки — несёт альтернативы, время каждого слова и разбор говорящих.
|
||||
Потолок в 256 МиБ на вложение назван строкой в `database.md`, а сколько там на
|
||||
деле у шестичасовой записи, не мерил никто.
|
||||
Reference in New Issue
Block a user