Липкий плеер, рабочий клик по времени, переключатель шума, режим двух моделей

Клик по времени не работал: в скрипте страницы черновика снова оказался
настоящий перевод строки вместо экранированного, и весь скрипт не выполнялся.
Тот же огрех, что был в странице разбора. Проверка парности кавычек теперь
охватывает обе страницы.

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

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

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

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vladimir Bryzgalov
2026-08-18 15:49:20 +05:00
co-authored by Claude Opus 5
parent 664d505446
commit bea5d3f877
9 changed files with 209 additions and 47 deletions
+3 -2
View File
@@ -32,7 +32,7 @@ def init_worker(models_dir: str, threads: int, replacements_path: str, base_dir:
def run_job(audio_path: str, num_speakers: int, ffmpeg: str,
normalize: bool = True, recover_gaps: bool = True,
diarize: bool = False) -> dict:
diarize: bool = False, ensemble: bool = False) -> dict:
"""Переводит файл в WAV и распознаёт. Выполняется в процессе-воркере."""
import tempfile
@@ -45,4 +45,5 @@ def run_job(audio_path: str, num_speakers: int, ffmpeg: str,
wav = Path(tmp) / "audio.wav"
to_wav16k(Path(audio_path), wav, ffmpeg, normalize)
return _pipeline.transcribe(wav, num_speakers=num_speakers,
recover_gaps=recover_gaps, diarize=diarize)
recover_gaps=recover_gaps, diarize=diarize,
ensemble=ensemble)