- Зачем:
- спецификация не должна оставлять неоднозначности перед реализацией диаризации.
- Что:
- уточнены сведение слов, таймкоды и предупреждение о малом кластере.
- очищены терминология и граница между ADR и спецификацией.
- сохранён результат сравнения WeSpeaker и CAMPPlus.
- Проверка:
- git diff --cached --check и проверка относительных ссылок.
- Зачем:
- решения карты должны стать устойчивой основой для реализации диаризации.
- Что:
- добавлены ADR-007 и спецификация пословной диаризации.
- дополнен доменный словарь и удалены закрытые направления из backlog.
- Проверка:
- git diff --cached --check.
- Зачем:
- результат benchmark нужно интерпретировать с учётом ограничения питания ноутбука.
- Что:
- зафиксировано урезанное питание во время прогонов.
- визуальная оценка потери производительности около 30% явно отделена от измеренных результатов.
- Проверка:
- git diff --check.
- Зачем:
- требовалось проверить долю смешанных ASR-сегментов на трёх записях, включая разговоры на двоих.
- Что:
- добавлен отчёт с долями сегментов и времени для трёх рабочих созвонов.
- обвязка замеров переведена на откалиброванный порог 0,89.
- исследовательский скрипт приведён к формату ruff.
- Проверка:
- выполнены три полных прогона bench_conflict.py с WeSpeaker и порогом 0,89.
- uv run ruff check и ruff format --check прошли успешно.
- Зачем:
- выводы о жизненном цикле и возможностях моделей должны читаться как единое исследование.
- Что:
- материал перестроен вокруг слоёв, платформ и уровней доказательства.
- объединены выводы по Intel, AMD, Apple и браузерным путям.
- подтверждённые возможности отделены от выводов и необходимых экспериментов.
- Проверка:
- относительные ссылки и структура Markdown проверены.
- git diff --cached --check выполнен успешно.
- Зачем:
- нужна фактическая опора для решений карты о диаризации на Intel-пути.
- Что:
- исследованы жизненные циклы ORT, OpenVINO, DirectML и Windows ML.
- сравнены пути AMD, Apple Silicon и браузерные EP для текущих моделей.
- зафиксированы wheel-матрицы, fallback и необходимые model-specific тесты.
- Проверка:
- git diff --cached --check.
- Зачем:
- навык wayfinder ожидает раздел про операции карты в документе трекера, а
в Gitea 1.27 нет подзадач, поэтому конвенции надо было зафиксировать явно.
- Что:
- описана принадлежность тикета карте через метку и ссылку в теле, поскольку
родительских связей в API нет.
- блокировки заведены на нативные зависимости Gitea, добавлены запросы фронтира.
- зафиксированы три особенности tea api: путь без ведущего слэша, обязательные
owner и repo в теле зависимости, нулевой код возврата при HTTP 404.
- Проверка:
- tea issues list --remote origin --labels wayfinder:map
- tea api --remote origin repos/ddmitry/local-transcriber/issues/14/dependencies
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- схема из бэклога приписывала спикера целому ASR-сегменту, и до замера
было неизвестно, насколько сильно это огрубляет результат.
- Что:
- добавлен разведочный замер sherpa-onnx на одной записи: 11,1x RTFx против
16,4x у ASR, свип порога кластеризации и доля загрязнённых сегментов.
- пункт бэклога переписан: движок описан как практически закрытый вопрос,
главной развилкой названа единица привязки спикера к тексту.
- зафиксировано, что 27% сегментов содержат не менее секунды чужой речи и на
них приходится больше половины времени транскрипта.
- Проверка:
- методика и условия замера воспроизводятся по разделам «Оборудование и
условия» и «Контрольная запись» в docs/benchmarks/2026-08-12-diarization-feasibility.md.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- документация обещала large-v3-turbo на NVIDIA, где он недоступен, и умалчивала, что модель по умолчанию без CUDA понимает только русскую речь.
- Что:
- large-v3-turbo перенесён из таблицы faster-whisper в раздел OpenVINO с измеренными размерами моделей.
- языковое ограничение авто-профиля и предупреждение CLI описаны в README, gpu.md и ADR-006.
- в backlog добавлен пункт про turbo для faster-whisper, в gpu.md снято расхождение по скорости openvino-cpu.
- Проверка:
- вычитка diff, проверка якорной ссылки на docs/gpu.md.
- Зачем:
- пользователям без NVIDIA нужен самый быстрый и читаемый CPU-профиль без дополнительных параметров.
- Что:
- auto-политика изменена на CUDA при наличии nvidia-smi, иначе ONNX GigaAM RNN-T int8.
- сохранён приоритет явных значений CLI и конфигурации для OpenVINO и FasterWhisper CPU.
- обновлены тесты, README, PRD, ADR, GPU-документация и вывод benchmark.
- Проверка:
- uv run pytest -q: 232 passed, 1 skipped.
- uv lock --check и git diff --cached --check.
- Зачем:
- требуется подтвердить сравнение OpenVINO и ONNX на втором CPU и повторно проверить дубли medium.
- Что:
- добавлены метрики четырёх профилей на Ryzen 7 8845H.
- зафиксированы четыре одинаковых прогона RSQM без повторов и результаты двух слепых ревью.
- описаны аргументы для будущего выбора backend по умолчанию.
- Проверка:
- git diff --cached --check.
- Зачем:
- нужна практическая оценка нового CPU-профиля на русских встречах.
- Что:
- зафиксированы скорость, WER, пунктуация, нагрузка и отзывчивость.
- добавлены две независимые оценки качества и рекомендации пользователям.
- Проверка:
- uv run pytest.
- реальные прогоны четырёх профилей на трёх записях.
Зачем:
- зафиксировать сравнение моделей на одном и том же массиве записей
- сохранить воспроизводимый набор файлов для будущих прогонов
Что:
- добавлены метрики и качественный вывод по Parakeet v3
- записаны точные имена, размеры и SHA-256 видео и эталонов
- обновлена рекомендация в README
Проверка:
- git diff --check
- Зачем:
- выбор CPU-модели должен опираться на несколько реальных записей, а не на единичный прогон.
- Что:
- добавлены скорость, WER и качественное сравнение пяти моделей на трёх встречах.
- обновлены рекомендации README и открытый вопрос ADR-006 для E2E RNN-T.
- Проверка:
- git diff --cached --check.
- Зачем:
- добавлена локальная транскрипция смешанной речи и русского текста с пунктуацией.
- Что:
- onnx-asr обновлён до 0.12 и зарегистрированы три модели GigaAM.
- выбор compute_type учитывает опубликованные квантизации и явность настройки.
- обновлены тесты, README и требования PRD.
- Проверка:
- uv run pytest -q: 223 passed, 1 skipped.
- выполнены smoke- и полные прогоны четырёх GigaAM-моделей.
- Зачем:
- смешанная русско-английская речь и отсутствие пунктуации у gigaam-v3-ctc
закрываются моделями из onnx-asr 0.12, но обновление заблокировано пином.
- Что:
- добавлена спека: три модели в каталог, Python 3.13 и ORT 1.28, верхние
границы мажорных версий, ловушки и границы ручной приёмки.
- в backlog добавлены ссылка на спеку из пункта про CPU-дефолт и новое
направление «профили намерения вместо выбора модели».
- Проверка:
- задача трекера #1 с порядком работ и критериями приёмки.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- инженерным навыкам нужна единая конфигурация трекера задач и доменных документов.
- Что:
- задокументированы Gitea workflow через tea и стандартные triage-метки.
- добавлены доменный словарь и правила работы с ADR, research и specs.
- Проверка:
- git diff --cached --check.
- tea --version: 0.15.1.
- Зачем:
- нужен проверяемый путь от обновления ASR-стека к выбору безопасного CPU-дефолта.
- Что:
- добавлено исследование актуальных движков и моделей с корректным именем файла.
- зафиксированы дефект OpenVINO, кандидаты GigaAM и матрица бенчмарка на Intel Core i5.
- Проверка:
- выполнена проверка git diff --cached --check.
- Зачем:
- внешнее сравнение с облачным Hypescribe показало: главный разрыв локальной транскрипции — не качество распознавания, а структура (спикеры 2/10 против 8/10); без диаризации MoM не собрать.
- Что:
- новый раздел «Структура транскрипта»: диаризация как опциональный пост-процессинг (sherpa-onnx vs pyannote, нужен ADR), ручка нарезки абзацев в formatter, словарь замен терминов как запасной план после бенчмарка RNN-T.
- зафиксировано вне ядра CLI: LLM-чистка и сопоставление имён спикеров.
- Проверка:
- docs-only, тесты не затронуты.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- в дереве с апреля лежал некоммиченный app.py (референсный Parakeet-сервер, не часть CLI) и служебный каталог .qwen/ — мусор в git status.
- Что:
- удалён app.py; его единственная ценная идея (чанкование длинных файлов по паузам через ffmpeg silencedetect) описана в docs/backlog.md с рабочими константами.
- .qwen/ добавлен в .gitignore (по аналогии с .codex).
- Проверка:
- git status — дерево чистое, untracked-файлов нет.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Эксперимент с DeepSeek V4 Pro: добавление onnx-asr бэкенда (Parakeet/GigaAM/
FastConformer) с независимой валидацией качества через agent-judge.
Реализация:
- backends/onnx_asr.py — третий pluggable backend через onnxruntime + Silero VAD.
- --device onnx с моделями gigaam-v3 (рекомендуется для русского) и parakeet-v3.
- _normalize_quantization() — маппинг compute_type → onnx-asr quantization
(int8/fp16 pass-through, float16→fp16, float32/fp32→None, остальные→ValueError).
- DEVICE_DEFAULTS для onnx, _VALID_DEVICES расширен.
Документация:
- ADR-006 — итоги: GigaAM v3 как best-CPU choice для русских встреч, Parakeet
непригоден для русского (воспроизведены три класса проблем из ADR-005), новый
класс ошибок Whisper medium на длинных файлах с тихими фрагментами.
- backlog.md — устойчивый список будущих экспериментов (GigaAM v3 RNN-T и др.).
Контекст эксперимента:
- ADR-005 (Opus, master) отклонил Parakeet на двух 15-мин файлах с тихим
микрофоном. ADR-006 повторяет на 22-81-мин файлах + добавляет GigaAM.
- Реализация прошла три фазы валидации: smoke-test (4 mock-API расхождения
→ fix), agent-judge на 9 транскриптах (подтверждение проблем Parakeet,
обнаружение Whisper-галлюцинаций), adversarial-review через GPT-5.5
(compute_type=float32 ломал onnx-загрузку → fix + 4 теста).
Не включено в merge: docs/superpowers/specs/ и plans/ от DeepSeek (stale
assumptions, итоговый канон в ADR-006; полные документы — в истории ветки).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
В проекте не было общего файла для будущих идей: docs/plan.md — историческая
летопись (всё [x]), docs/gpu.md — потенциальные направления привязаны к GPU/CPU
производительности, открытые вопросы из ADR легко теряются среди следующих ADR.
Создан docs/backlog.md как канонический хаб для будущих экспериментов
с обоснованием, цифрами и ссылками на источники. Первые записи:
- GigaAM v3 RNN-T — потенциальная замена CTC-дефолта (WER 2.6% vs 13.2%
на сложных текстах, e2e_rnnt c пунктуацией, 70:30 vs Whisper-large-v3 LLM-judge)
- Canary 1B — multilingual + пунктуация на CPU
- Whisper medium галлюцинации на длинных файлах (chunk_length / pipeline-фильтры)
- Качественный pipeline для OpenVINO (давно зафиксировано в gpu.md)
- Включение onnx в --device auto после стабилизации
Все направления связаны ссылками на источники (ADR-006, gpu.md, публикации
SberDevices), чтобы при возврате к работе не пришлось воспроизводить контекст.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Переименовано из 005 в 006: на master уже есть ADR-005-parakeet-evaluation
от прошлого эксперимента (Opus, отклонение Parakeet), нумерация бы конфликтовала.
Качество замерено независимым agent-judge'ем по методологии ADR-005
на 9 транскриптах (3 файла × 3 backend), а не субъективными пометками
"Отлично/Хорошо" на одном файле, как в первой версии. Артефакты транскриптов
лежат в /mnt/c/ddmitry/Videos/OBS/ для верификации.
Подтверждены три класса проблем Parakeet из ADR-005 (Mm-hmm-редукция,
иноязычные вставки, искажение IT-терминов) на новом наборе файлов
с конкретными цитатами и таймкодами.
Обнаружен новый класс ошибок Whisper medium: галлюцинации на длинных
файлах с тихими фрагментами (до 17 минут потеряно на одном файле,
многоминутные повторы, приписывание несуществующих имён). Не описано
в ADR-005, потому что там были 15-минутные отрывки.
GigaAM v3 подтверждён как лучший backend для русских встреч на CPU
(summary utility 4/5 на всех файлах, единственный без потерь содержания).
Рекомендация в README уточнена: parakeet-v3 для русского не подходит,
openvino-cpu medium — только для встреч ≤30 мин с равномерной громкостью.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Зачем:
- задокументировать результаты сравнения gigaam-v3 vs OpenVINO на CPU.
- Что:
- таблица скорости по 3 файлам (3-5x ускорение).
- сравнение качества русской речи с GPU faster-whisper.
- решение: оставить бэкенд как экспериментальный (--device onnx).
- Проверка:
- просмотр docs/adr/005-onnx-asr-backend.md.
- Зачем:
- зафиксировать в master результат эксперимента с Parakeet-бэкендом:
что проверяли, какие цифры получили, почему оставили Whisper как дефолт.
Знания доступны, код — в экспериментальной ветке feature/parakeet-backend.
- Что:
- docs/adr/005-parakeet-evaluation.md — полный контекст решения: гипотеза,
методология, метрики скорости (Parakeet 2.7x быстрее, -35% RAM),
качество (Summary utility 2-3/5 vs 4/5 у Whisper), систематические
проблемы модели на тихой русской речи, VAD-тюнинг не помог, условия
пересмотра решения в будущем (английский / live-captioning / русские
specialized-модели через onnx-asr).
- docs/gpu.md — короткая заметка под «Потенциальные направления развития»
со ссылкой на ADR-005.
- Проверка:
- cat docs/adr/005-parakeet-evaluation.md.
- grep -A5 "Parakeet TDT — проверено" docs/gpu.md.
- ветка feature/parakeet-backend сохранена и не удаляется.
- Зачем:
- зафиксировать дизайн экспериментального бэкенда до имплементации; гипотеза — Parakeet TDT v3 быстрее/качественнее Whisper на Intel/AMD встройках.
- Что:
- добавлен docs/superpowers/specs/2026-04-18-parakeet-backend-design.md после 3 раундов adversarial-review.
- зафиксированы: onnx-asr+Silero VAD как runtime, CPU EP в MVP, --device parakeet, int8/fp32 compute_type, no-fallback политика, long-audio gate с blocker-thresholds (peak RSS ≤4GB, первый status ≤10с, interval ≤30с, offline после первого запуска).
- Проверка:
- cat docs/superpowers/specs/2026-04-18-parakeet-backend-design.md.
float16 требует CC ≥ 7.0, float32 падает с ошибкой — пребилды
CTranslate2 4.x не включают sm_50/sm_60. Рекомендация: --device cpu
или --device openvino.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- CTranslate2 по умолчанию использует 4 потока; на многоядерных CPU (8+ ядер)
это неоптимально — --threads 8 даёт +13% ускорения.
- Не было данных по int8_float32/int8_float16 на NVIDIA GPU.
- Что:
- --threads / -t: новый CLI-флаг, пробрасывается через load_model →
backend.create_model(cpu_threads=...) → WhisperModel(cpu_threads=...).
- Валидация min=0 на входе (typer), Backend протокол синхронизирован.
- docs/gpu.md: результаты бенчмарка 6 комбинаций CUDA compute_type
(medium/large-v3 × float16/int8_float32/int8_float16) на двух файлах
(16 мин и 46 мин). Ключевой вывод: float16 — оптимальный дефолт;
large-v3 ненадёжен на длинных записях.
- README: --threads добавлен в таблицу опций.
- Фикс теста: test_resolve_repo_explicit_unsupported_pair_raises обновлён
под добавление medium fp16 модели.
- Проверка:
- uv run pytest: 157 passed.
- transcribe file.mp4 --device cpu --threads 8: 277с vs 320с (дефолт).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Зафиксированы два направления развития:
- temperature fallback и фильтры галлюцинаций для OpenVINO бэкенда
- тестирование int8_float32/int8_float16 на CUDA
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Добавлена секция CPU бэкенда: int8_float32 как рекомендация, тюнинг потоков
- Объяснение разницы качества OpenVINO vs CTranslate2 (pipeline декодирования)
- Секция CUDA: int8_float32/int8_float16 как альтернатива для тестирования
- Обновлена таблица OpenVINO моделей (medium fp16)
- Обновлены таблицы скорости и качества
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Бенчмарк показал: OpenVINO fp16 даёт 3.7x ускорение, но теряет качество
на русской разговорной речи. CTranslate2 int8_float32 — оптимальный баланс.
Следующий шаг — DirectML бэкенд для AMD Radeon iGPU.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- OpenVINO backend хардкодил "CPU", хотя Intel Arc GPU доступен и даёт ~2x ускорение.
- Что:
- новые device modes: --device openvino-gpu, openvino-cpu; openvino — авто-детект GPU/CPU.
- detect_device() проверяет Intel GPU через OpenVINO Core API (с fail-safe).
- OpenVINOBackend передаёт "GPU"/"CPU" в WhisperPipeline вместо хардкода "CPU".
- подсказка "Совет: --model large-v3" при наличии GPU и модели не large-v3.
- .gitattributes для нормализации line endings (eol=lf).
- 150 тестов, включая GPU detection, routing, fallback, CLI device info.
- README, docs/gpu.md, docs/PRD.md обновлены для Intel GPU.
- Проверка:
- uv run pytest (150 passed).
- uv run transcribe --device openvino-gpu file.mp4 на Intel Arc 140T GPU.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- OpenVINO GenAI может вернуть отрицательный end_ts, ломая формат транскрипта.
- зафиксировать бенчмарки на Intel и AMD CPU для документации.
- Что:
- backends/openvino.py: start/end клампятся через max(0, ...).
- docs/gpu.md: полная таблица скорости Intel i7 vs AMD Ryzen 7 8845H.
- сравнение качества medium int8 vs large-v3 fp16 vs CPU float32 на одном файле.
- вывод: large-v3 OpenVINO (416с) быстрее medium CPU (734с) при лучшем качестве.
- Проверка:
- uv run pytest -q — 124 passed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- зафиксировать реальные бенчмарки OpenVINO перед мержем в main.
- Что:
- скорость: OpenVINO medium int8 в 3-4x быстрее CPU float32 (205с vs 658с на 16 мин файле).
- качество: сопоставимо с CPU float32 и CUDA float16, галлюцинаций нет.
- таблица ожидаемой скорости обновлена с OpenVINO строкой.
- отмечено, что тестирование на AMD CPU пока не проводилось.
- Проверка:
- uv run transcribe file.mp4 --device openvino.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- README перегружен деталями GPU/бенчмарков, нет Quick Start, macOS/Windows — второй класс.
- системный ffmpeg не нужен — PyAV (зависимость faster-whisper) включает FFmpeg в wheels.
- Что:
- переписан README: Quick Start в первых строках, установка без клонирования через uv tool install, паритет платформ, progressive disclosure через <details>.
- удалена функция check_ffmpeg() из utils.py, убраны импорт и вызовы из cli.py.
- убраны моки check_ffmpeg и тест ffmpeg-ошибки из test_cli.py.
- GPU-контент вынесен в docs/gpu.md, добавлен CONTRIBUTING.md.
- Проверка:
- uv run pytest — 97 passed, 1 skipped.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- обработка нескольких файлов за один вызов с загрузкой модели один раз.
- хранение дефолтов (модель, язык, устройство) в .transcriber.toml.
- Что:
- добавлен config.py: поиск .transcriber.toml (CWD → ~/.config), парсинг, валидация, приоритет CLI > конфиг > хардкод.
- рефакторинг transcriber.py: выделены load_model() и _transcribe_file() с TranscribeFileResult для переиспользования модели в батче.
- добавлены expand_globs() с дедупликацией и has_existing_transcript() в utils.py.
- CLI: files: list[Path], --force/-f, prescan-first батч с итоговой статистикой и временем, Status-спиннер для прогресса.
- README: секции батч-режим, конфигурационный файл, --force в таблице опций.
- ADR-002: зафиксированы архитектурные решения (prescan-first, TranscribeFileResult, конфиг без мержа).
- Проверка:
- uv run pytest -q — 94 passed, 1 skipped.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- чтобы коллега мог установить и запустить проект на Windows/WSL2/Linux без вопросов (шаг 7 plan.md).
- Что:
- создан README.md: требования, установка через uv tool, примеры CLI, таблицы моделей и квантизаций.
- описаны настройка GPU/CUDA по платформам, совместимость GPU, ожидаемая скорость.
- добавлен пример выходного файла, соответствующий реальному формату formatter (HH:MM:SS.ss, группировка абзацев).
- отмечен шаг 7 как выполненный в plan.md.
- Проверка:
- uv tool install . && transcribe --help — CLI доступен глобально.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- пользователь видел raw traceback при ошибках, не было корректной обработки Ctrl+C
- Что:
- graceful Ctrl+C: перехват KeyboardInterrupt → «Прервано пользователем» + exit 130
- пользовательские ошибки (файл не найден, пустой) — чистое сообщение без traceback
- неожиданные ошибки — traceback только с --verbose, иначе подсказка
- Windows CUDA диагностика интегрирована в общий обработчик ошибок
- логика вынесена в _run(), обработка ошибок — в main()
- Проверка:
- uv run pytest -v — 60 passed, 1 skipped
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- зафиксировать архитектурное решение по GPU runtime и rejected alternatives,
чтобы не переизобретать отклонённые подходы в будущем.
- Что:
- создан docs/adr/001-cuda-bootstrap.md (контекст, решение, tradeoffs, альтернативы).
- PRD 4.2: исправлено описание CUDA-зависимостей (cuDNN не нужен, cuBLAS из pip).
- plan.md: добавлен выполненный шаг 5.1 со ссылкой на ADR.
- удалены docs/plan-gpu-runtime.md и отчёты ревью (review-stages-*).
- Проверка:
- cat docs/adr/001-cuda-bootstrap.md.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- шаг 5 плана: нужен рабочий CLI-happy path, связывающий utils / transcriber / formatter.
- ревью этапов 4–5 выявило два medium-бага в formatter и отсутствие тестов для CLI.
- Что:
- cli.py: все опции по PRD 3.2 (--model, --language, --output, --device, --compute-type, --verbose),
rich Status + stderr-консоль, предупреждение на пустую речь, статистика времени.
- transcriber.py: добавлена ensure_model_available() с проверкой кэша HF и валидацией
локальной директории; on_status callback для передачи прогресса в CLI; обработка
ImportError при отсутствии socksio через SOCKS proxy.
- formatter.py: исправлен overflow в format_timestamp (0.995 → 00:01.00 вместо 00:00.100);
сегменты теперь пишутся с явным пробелом и strip() независимо от whisper-формата текста.
- deps: добавлен socksio>=1.0.0 для поддержки SOCKS proxy при загрузке модели.
- tests: test_cli.py (8 тестов на CLI-контракт), расширены test_formatter.py и test_transcriber.py.
- Проверка:
- uv run pytest — 42 passed.
- uv run transcribe --help показывает все опции.