Commit Graph
24 Commits
Author SHA1 Message Date
Dmitriy DementievandClaude Opus 4.6 9a289bd59e docs: результаты whisper.cpp + Vulkan на Radeon 780M
432с — 2x vs CPU, но всего 28% быстрее CT2 int8_float32.
Зацикливание при дефолтных параметрах, workaround -mc 0.
Вывод: сложность интеграции не оправдана, CT2 int8_float32 — оптимум.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 23:23:58 +03:00
ddadminandClaude Opus 4.6 52acecfd65 docs: результаты прототипа whisper.cpp в WSL2
- whisper.cpp medium f16 на CPU: 886с, качество ≈ CT2 float32
- Vulkan GPU не доступен в WSL2 для AMD (нет dozen драйвера)
- Следующий шаг: Windows-сборка с нативным Vulkan

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:24:11 +03:00
Dmitriy DementievandClaude Opus 4.6 2a7d3605e7 docs: детали интеграции whisper.cpp + Vulkan
Модели (GGML формат), сборка, Python-биндинги, subprocess-подход.
Следующий шаг — прототип в WSL.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 16:45:14 +03:00
Dmitriy DementievandClaude Opus 4.6 78cd8b42ad docs: исследование ускорения на AMD Radeon/NPU
DirectML заблокирован (missing operator, maintenance mode).
whisper.cpp + Vulkan — основной путь (3-4x на Radeon 780M).
AMD NPU (XDNA 1) — рано, ждём XDNA 2 и зрелый tooling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 16:23:02 +03:00
Dmitriy DementievandClaude Opus 4.6 2a2f6666cf docs: бенчмарк качества транскрипции (2026-03-23)
Детальное сравнение medium/large-v3 × OpenVINO/CTranslate2/Whisper.ai
на записи совещания 14:41, русский язык, AMD Ryzen 7 8845H.
Рабочий документ для разработки AMD-ускорения.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:58:48 +03:00
Dmitriy DementievandClaude Opus 4.6 6f7e61c779 docs(adr): ADR-004 — дефолты compute_type и стратегия ускорения
Бенчмарк показал: OpenVINO fp16 даёт 3.7x ускорение, но теряет качество
на русской разговорной речи. CTranslate2 int8_float32 — оптимальный баланс.
Следующий шаг — DirectML бэкенд для AMD Radeon iGPU.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:58:12 +03:00
Dmitry DementievandClaude Opus 4.6 617181f2dc feat(openvino): добавлена поддержка Intel GPU через OpenVINO
- Зачем:
  - 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>
2026-03-22 15:45:27 +03:00
ddadminandClaude Opus 4.6 f5345031ef docs: результаты тестов на 3 CPU + инструкция очистки моделей
- Зачем:
  - сводка бенчмарков OpenVINO на Intel Ultra 7, AMD Ryzen 7, Intel i7.
  - пользователям нужна инструкция по управлению дисковым пространством моделей.
- Что:
  - docs/gpu.md: полная таблица скорости по 3 CPU, small/medium/large-v3.
  - docs/gpu.md: рекомендации по выбору модели для разных сценариев.
  - README.md: секция очистки моделей (Linux + Windows PowerShell).
  - README.md: troubleshooting WinError 1314 (симлинки на Windows).
- Проверка:
  - uv run pytest -q — 124 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 11:50:34 +03:00
ddadminandClaude Opus 4.6 61908604a0 fix(openvino): клампинг отрицательных таймкодов + результаты тестов Intel/AMD
- Зачем:
  - 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>
2026-03-22 11:10:48 +03:00
ddadminandClaude Opus 4.6 29da69c595 docs(gpu): добавлены результаты тестирования OpenVINO на Intel CPU
- Зачем:
  - зафиксировать реальные бенчмарки 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>
2026-03-22 00:29:18 +03:00
ddadminandClaude Opus 4.6 2d35bda976 docs: ADR-003, обновлены gpu.md и README для OpenVINO
- Зачем:
  - документация должна отражать новую архитектуру бэкендов и поддержку OpenVINO.
- Что:
  - docs/adr/003-pluggable-backends.md: Protocol, lazy imports, fallback, compute_type контракт.
  - docs/gpu.md: секция OpenVINO с таблицей моделей, таблица бэкендов, CUDA 12 для Windows исправлен везде.
  - README.md: OpenVINO в фичах, платформах, CLI опциях, дефолтах; fp16 документирован как OpenVINO-тип.
- Проверка:
  - uv run pytest -q — 124 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 00:02:52 +03:00
ddadminandClaude Opus 4.6 87f7dc1723 docs(readme): редизайн README и удаление зависимости от ffmpeg
- Зачем:
  - 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>
2026-03-18 23:07:39 +03:00
ddadminandClaude Opus 4.6 e28232ef50 feat(cli): добавлен батч-режим и конфигурационный файл (шаги 8–12)
- Зачем:
  - обработка нескольких файлов за один вызов с загрузкой модели один раз.
  - хранение дефолтов (модель, язык, устройство) в .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>
2026-03-18 20:57:19 +03:00
ddadminandClaude Opus 4.6 b46827a283 docs: добавлен README с инструкцией по установке и использованию
- Зачем:
  - чтобы коллега мог установить и запустить проект на 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>
2026-03-18 20:16:33 +03:00
ddadminandClaude Opus 4.6 a72ac1187c feat(cli): реализована обработка ошибок и graceful Ctrl+C (шаг 6)
- Зачем:
  - пользователь видел 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>
2026-03-18 19:48:27 +03:00
ddadminandClaude Opus 4.6 18115ec7fd docs: добавлен ADR-001 (CUDA bootstrap), обновлены PRD и plan
- Зачем:
  - зафиксировать архитектурное решение по 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>
2026-03-18 18:53:41 +03:00
ddadmin 3d14ed7b86 feat(cli): реализован шаг 5 — CLI-связка всех модулей с исправлениями из ревью
- Зачем:
  - шаг 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 показывает все опции.
2026-03-17 23:38:32 +03:00
ddadminandClaude Opus 4.6 0d1a734479 feat(formatter): реализовано форматирование транскрипта (шаг 4)
- Зачем:
  - необходим модуль формирования markdown-файла с таймкодами и метаданными.
- Что:
  - реализованы format_timestamp (MM:SS.ss / HH:MM:SS.ss), format_transcript (шапка по PRD 3.3, авто-часы при >1ч, пустая речь), write_transcript (UTF-8).
  - добавлено 6 тестов в test_formatter.py (22 теста зелёные).
- Проверка:
  - uv run pytest tests/test_formatter.py -v (6 passed).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 22:35:30 +03:00
ddadminandClaude Opus 4.6 ae2aa5412c docs(review): добавлен отчёт ревью этапов 1-3
- Зачем:
  - фиксация результатов code review для трассируемости.
- Что:
  - добавлен docs/review-stages-1-3.md с findings и статусом исправлений.
- Проверка:
  - cat docs/review-stages-1-3.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 22:30:59 +03:00
ddadminandClaude Opus 4.6 dfc5f46bf3 feat(transcriber): реализована обёртка над faster-whisper (шаг 3)
- Зачем:
  - необходим модуль транскрипции с CUDA fallback для основного flow приложения.
- Что:
  - добавлена зависимость faster-whisper>=1.2.1 в pyproject.toml.
  - реализована функция transcribe() с fallback CUDA→CPU на всех этапах (загрузка модели, вызов transcribe, итерация сегментов).
  - исправлен IndexError в get_gpu_name() при пустом stdout nvidia-smi.
  - добавлено 6 тестов в test_transcriber.py и 1 тест в test_utils.py (16 тестов зелёные).
- Проверка:
  - uv run pytest -v (16 passed).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 22:30:40 +03:00
ddadmin 510d6ccfc9 feat(utils): реализованы проверки окружения (шаг 2)
- Зачем:
  - необходимы утилиты для проверки ffmpeg, определения устройства и
    валидации входного файла перед запуском транскрипции.
- Что:
  - check_ffmpeg() завершает процесс с понятным сообщением, если ffmpeg не в PATH.
  - detect_device() возвращает "cuda" при наличии nvidia-smi, иначе "cpu".
  - get_gpu_name() получает имя GPU через nvidia-smi или возвращает None.
  - validate_input_file() проверяет существование, тип и размер файла;
    неизвестное расширение — warning, не ошибка.
  - build_output_path() формирует путь <stem>-transcript.md рядом с исходником.
- Проверка:
  - uv run pytest tests/test_utils.py -v — 9 passed.
  - uv run python -c "from local_transcriber.utils import check_ffmpeg, detect_device; check_ffmpeg(); print(detect_device())"
2026-03-17 21:51:22 +03:00
ddadmin ade3b23301 feat(scaffold): добавлена начальная структура проекта local-transcriber
- Зачем:
  - необходима базовая структура пакета для последовательной реализации шагов по плану.
- Что:
  - создан pyproject.toml с зависимостями typer, rich и dev-зависимостью pytest.
  - добавлены модули-заглушки cli.py, transcriber.py, formatter.py, utils.py с сигнатурами и raise NotImplementedError.
  - созданы пустые тестовые файлы test_formatter.py, test_transcriber.py, test_utils.py.
  - добавлены .gitignore и uv.lock; отмечены чекбоксы шага 1 в docs/plan.md.
- Проверка:
  - uv run transcribe --help — показывает аргументы.
  - uv run pytest — тесты обнаруживаются без ошибок.
  - python -c "from local_transcriber import cli, transcriber, formatter, utils" — импорт без ошибок.
2026-03-17 21:46:10 +03:00
ddadmin e0fcf43533 docs(plan): уточнён план по итогам ревью
- Зачем:
  - устранены пробелы в плане: недостающие тесты, неописанные параметры, архитектурные расхождения.
- Что:
  - detect_device() возвращает только str (device), compute-type независим от него.
  - добавлен get_gpu_name() для человекочитаемой строки устройства в шапке markdown.
  - добавлен on_segment callback в transcribe() для --verbose без переделки API.
  - добавлено поле device_used в TranscribeResult (фактическое устройство после fallback).
  - добавлены тесты: test_utils.py (9 тестов), test_transcriber.py (4 mock-теста).
  - выровнено поведение пустой речи: файл с шапкой + *Речь не обнаружена.* в теле (PRD и plan).
  - добавлены импорты Callable, datetime, Path в заглушки шага 1.
  - убраны строки с git add -A / git commit из всех шагов.
- Проверка:
  - открыть docs/plan.md и docs/PRD.md и убедиться в согласованности.
2026-03-17 21:40:41 +03:00
ddadmin 557190e8a9 docs(project): добавлены PRD и план реализации
- Зачем:
  - зафиксированы требования к проекту и план разработки для выравнивания команды.
- Что:
  - добавлен docs/PRD.md с требованиями к продукту.
  - добавлен docs/plan.md с планом реализации.
- Проверка:
  - открыть docs/PRD.md и docs/plan.md и убедиться в корректности содержимого.
2026-03-17 21:21:24 +03:00