Commit Graph
9 Commits
Author SHA1 Message Date
Vladimir BryzgalovandClaude Opus 5 839145179c Черновик отдаётся машинно; ссылка на список
Формат text записывает спорное слово как {основной|вариант|вариант} - ровно
тот выбор, что стоял перед человеком. Языковая модель разрешает такие места
по смыслу фразы: распознавание слышит слово отдельно, модель видит
предложение целиком. Формат json отдаёт голоса как есть, порог выбирает
вызывающая сторона.

Промпт и порядок опроса записаны в docs. Там же оговорено, чего приём
не делает: пропущенное на записи он не восстанавливает, и дописывать
слова модели прямо запрещено.

Со страниц записи и черновика не было пути назад, кроме кнопки браузера.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 16:07:37 +05:00
Vladimir BryzgalovandClaude Opus 5 bea5d3f877 Липкий плеер, рабочий клик по времени, переключатель шума, режим двух моделей
Клик по времени не работал: в скрипте страницы черновика снова оказался
настоящий перевод строки вместо экранированного, и весь скрипт не выполнялся.
Тот же огрех, что был в странице разбора. Проверка парности кавычек теперь
охватывает обе страницы.

Плеер приклеен к верху на обеих страницах: спорное место слушают, не
прокручивая наверх.

Черновик подсвечивал слово при несогласии любой модели - жёлтым выходил
почти весь текст. Теперь по умолчанию нужно несогласие большинства: подсветки
втрое меньше (152 слова против 385), но в чистой части 95,4 % верных вместо
98 %. Строгий режим доступен ссылкой; порог применяется при показе, поэтому
переключение не требует пересборки.

Режим ensemble: вторая модель подставляется там, где основная промолчала.
Задаётся настройкой и параметром запроса - одну запись можно прогнать в обоих
режимах и сравнить на странице разбора.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 15:49:20 +05:00
Vladimir BryzgalovandClaude Opus 5 8727acd10d Черновик собирается по кнопке фоновой задачей
Три модели вместо одной считаются минуту и больше, плюс их загрузка при
первом обращении - держать на этом HTTP-запрос нельзя. Первый запрос
запускает сборку, страница обновляет себя сама и показывает ход работы.

Отдаётся страницей, а не документом: библиотеки для .docx в поставке нет,
а обновление возит только код. В Word переносится кнопкой копирования,
которая кладёт в буфер разметку вместе с текстом.

Тест поймал потерю: лишнее слово в конце реплики не отмечалось - индекс
выходил за границу, и метка молча пропадала.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 15:17:34 +05:00
Vladimir BryzgalovandClaude Opus 5 96c2a27c4c Плеер на странице разбора и хранение записей
Записи складываются в папку records и удаляются вместе с задачей по тому же
сроку. На странице разбора появился плеер, а щелчок по времени слева от
реплики перематывает запись - можно послушать спорное место, не таская
ползунок.

Настройка keep_records в config.toml. Если запись не сохранена, вместо
пустого плеера показывается объяснение.

Черновик с подсветкой расхождений пока остаётся отдельной командой:
build/make_draft.py. Ложные расхождения по написанию больше не подсвечиваются.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 15:11:23 +05:00
Vladimir BryzgalovandClaude Opus 5 7cdfb35e55 Сводка на странице разбора и длительность в истории
При выносе общих стилей правила для сводки потерялись: подпись слипалась
со значением, и строки шли столбиком вместо ряда.

Длительность у задач, обработанных до 0.21.0, оставалась нулевой. Значение
есть в сохранённом результате, поэтому история чинится при открытии базы.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 19:31:51 +05:00
Vladimir BryzgalovandClaude Opus 5 7dd49a11ec Копирование в Word, длительность в списке, хранение две недели
Длительность в списке всегда была нулевой: при загрузке файл ещё не
декодирован, и mark_done её не записывал.

Кнопка копирования кладёт в буфер и разметку, и простой текст: Word берёт
первое и сохраняет полужирные имена говорящих, простые редакторы - второе.

Срок хранения поднят с 3 суток до 336 часов, после чистки выполняется
VACUUM: SQLite помечает страницы свободными, но файл не уменьшает.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 19:20:23 +05:00
Vladimir BryzgalovandClaude Opus 5 f3640f2941 Список задач в браузере и сравнение с эталоном
GET /v1/jobs/view - список последних задач со ссылками на разбор. Токен
подставляется в ссылки, иначе по каждой пришлось бы дописывать его руками.
Отдельный тест следит, чтобы маршрут не перехватывался /v1/jobs/{job_id}.

build/compare_reference.py считает WER относительно эталона, выписанного
на слух. Косвенные метрики ловят крупные сдвиги и слепы к систематическим
мелким потерям - так и пропустили обрыв концов фраз.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 18:39:21 +05:00
Vladimir BryzgalovandClaude Opus 5 456e86ef9a Страница объясняет, почему нет разбивки на предложения
Результаты, обработанные до 0.14.0, не содержат массива sentences. Пустой
блок разметки выглядел бы поломкой страницы - теперь он говорит, что нужно
отправить запись заново.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 14:03:46 +05:00
Vladimir BryzgalovandClaude Opus 5 0dd531aaa1 Страница разбора расшифровки в браузере
По одному JSON не понять, чья ошибка: распознавание склеило реплики или
LLM неверно расставила роли. Страница показывает обе стороны и принимает
ответ модели, чтобы диалог собрался на глазах.

GET /v1/jobs/{id}/view - токен заголовком либо ссылкой ?token=ЗНАЧЕНИЕ.
Страница самодостаточна: ни одного внешнего запроса.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 13:58:08 +05:00