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