AAYMA
RU
Войти

JazAI

Локальное приложение автопротоколирования совещаний: по аудио/видео строит транскрипт с разделением говорящих, извлекает поручения, ответственных…

Рабочий MVP
Команда «Y» 17💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Y
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP

Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)

Суть

Локальное приложение автопротоколирования совещаний: по аудио/видео строит транскрипт с разделением говорящих, извлекает поручения, ответственных, сроки и саммари с цитатами-источниками, позволяет править и выгружает протокол DOCX по двум шаблонам.

Как устроено

FFmpeg нормализует запись, faster-whisper (Whisper small) распознаёт речь, pyannote (community-1) выполняет диаризацию, слова выравниваются с интервалами говорящих. Локальный Qwen3-4B через llama.cpp извлекает поручения, сроки, показатели и саммари с проверкой, что цитата есть в записи; клик по цитате проигрывает фрагмент. Ручные правки и имена спикеров сохраняются в SQLite с историей версий, экспорт через python-docx. Всё работает на CPU без облачных API, сервер слушает только 127.0.0.1.

Ключевые решения

  • faster-whisper
  • pyannote диаризация
  • выравнивание слов по спикерам
  • извлечение поручений с валидацией цитат
  • llama.cpp
  • offline guard
  • WER/CER оценка

Метрики

WER/CER 0% на синтетической записи 17 с; полный проход 3 мин 41 с на CPU; 158 тестов

Особенности

Полностью локальный контур для закрытых совещаний: установщики в один клик под Windows/macOS/Linux, сетевой guard для проверки отсутствия внешних вызовов, каждое поручение привязано к проигрываемой цитате. Казахская и смешанная речь пока не проверены.

Стек

Python 3.11 · FastAPI · SQLite · python-docx · uv · GitHub Actions · HTML/JS

Модели

Whisper small (faster-whisper) · pyannote community-1 · Qwen3-4B (llama.cpp)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-9e0cb6e2-y.

README

README.md

JazAI — локальное автопротоколирование совещаний

Проект для HackAlem AI. Вы загружаете запись совещания, а JazAI на вашем компьютере:

  • распознаёт речь и делит её на реплики разных людей с таймкодами;
  • находит поручения, ответственных, сроки и составляет краткое саммари;
  • к каждому поручению прикладывает цитату из записи, по клику она проигрывается;
  • даёт всё проверить и исправить, затем выгружает протокол в Word (DOCX).

Распознавание и анализ выполняют локальные модели, без облачных API. Полная проверка закрытого контура при запрете внешней сети на уровне ОС пока не завершена.


Как запустить — 3 шага

Шаг 1. Скачайте проект

Нажмите зелёную кнопку Code → Download ZIP вверху этой страницы и распакуйте архив. Или через терминал:

git clone https://github.com/BAITC-Hacks/hack-9e0cb6e2-y.git

Шаг 2. Запустите файл для своей системы

СистемаЧто сделать
WindowsДважды щёлкните start-windows.bat
macOSДважды щёлкните start-macos.command. Если macOS не даёт открыть файл, нажмите на него правой кнопкой → Открыть
LinuxОткройте терминал в папке проекта и выполните bash start-linux.sh

Скрипт установит Python 3.11 и библиотеки, скачает модели. Для автоматической установки FFmpeg на Windows нужен winget, на macOS — Homebrew, на Linux — поддерживаемый пакетный менеджер и права установки. Если FFmpeg и ffprobe уже доступны, этот шаг пропускается.

Шаг 3. Один раз откройте доступ к модели на Hugging Face

Модель, которая различает голоса (pyannote), бесплатная. Но её авторы выдают её только после согласия с условиями. Скрипт остановится и подскажет, что делать:

  1. Откроется страница модели. Войдите или зарегистрируйтесь на Hugging Face, это бесплатно.
  2. Заполните короткую форму и примите условия.
  3. Вернитесь в окно скрипта и нажмите Enter.
  4. Скрипт попросит войти в тот же аккаунт. Следуйте подсказке в окне: откройте ссылку и подтвердите вход.

Готово. Когда всё скачается, браузер откроется сам на странице JazAI. Обычно это адрес http://127.0.0.1:8000.

⏱ На первый запуск ориентировочно заложите 15–40 минут или больше. Нужно скачать несколько ГБ; время и объём зависят от системы, скорости интернета и уже установленных компонентов. Для следующих запусков используйте тот же файл. Готовые модели скачивать заново не нужно; время открытия зависит от компьютера и состояния окружения. Не закрывайте окно скрипта, пока пользуетесь приложением. Чтобы остановить, нажмите Ctrl+C или закройте окно.


Что нужно компьютеру

Требование
СистемаWindows 10/11 (x64), macOS 14+ на Apple Silicon (M1 и новее), Linux x86_64 или ARM64 (Ubuntu 22.04+, Debian 12+, Fedora и похожие)
Память16 ГБ RAM: на такой машине проект проверен
Диск~12 ГБ свободного места
ИнтернетНужен только при первом запуске
ВидеокартаНе нужна, всё работает на процессоре
АккаунтБесплатный аккаунт Hugging Face

Особенности систем:

  • Windows: если FFmpeg ещё не установлен, нужен winget из приложения «Установщик приложений» (App Installer). Если winget отсутствует, установите его или FFmpeg вручную по подробному руководству.
  • macOS: для установки FFmpeg нужен Homebrew. Если его нет, скрипт подскажет. Intel Mac не поддерживается, потому что PyTorch для них больше не выпускается.
  • Linux: при установке FFmpeg система может спросить пароль администратора (sudo).

Как проверить основной сценарий

  1. Возьмите запись на 30–60 секунд, где говорят 2–3 человека (MP3 или WAV).
  2. На странице JazAI введите название встречи, выберите файл и поставьте галочку согласия.
  3. Нажмите «Загрузить и обработать» и дождитесь текста с разбивкой по говорящим. На короткой записи обработка может занять несколько минут; время зависит от процессора, свободной памяти и длительности записи.
  4. Нажмите на таймкод любой реплики, и запись начнёт играть с этого места.
  5. В блоке «Кто говорит» впишите известные вам имена вместо SPEAKER_00. Для каждого введённого имени отметьте «Подтверждаю соответствие имени этому голосу», затем нажмите «Сохранить изменения». Без подтверждения имя не сохранится; неизвестные имена оставьте пустыми.
  6. Нажмите «Составить поручения и саммари» и дождитесь результата. Анализ на CPU может занять несколько минут или дольше; измеренные примеры приведены в отчёте.
  7. Проверьте поручения, ответственных и сроки по цитатам-источникам. После исправлений или отметок проверки нажмите «Сохранить поручения и итоги» и дождитесь подтверждения сохранения. Пока есть несохранённые изменения, скачивание DOCX недоступно.
  8. Выберите шаблон и нажмите «Скачать протокол DOCX». Файл открывается в Word или LibreOffice.

Своей записи нет? На Windows можно создать синтетическую командой .\scripts\synthesize_smoke.ps1. Подробности в руководстве.


Если что-то пошло не так

Что видитеЧто сделать
Скрипт остановился с сообщением «ОШИБКА»Прочитайте подсказку над ней и запустите тот же файл снова: готовые шаги повторно не выполняются
Оборвалось скачиваниеЗапустите файл ещё раз, загрузка продолжится
Ошибка 401/403 при скачивании pyannoteУсловия модели приняты в другом аккаунте, не в том, куда выполнен вход. Выполните .venv/bin/hf auth login --force (Windows: .venv\Scripts\hf.exe auth login --force) и запустите файл снова
Windows: «Система Windows защитила ваш компьютер»Нажмите Подробнее → Выполнить в любом случае
Браузер не открылсяОткройте адрес, который скрипт напечатал в окне, например http://127.0.0.1:8000
Порт 8000 занятНичего делать не нужно: скрипт сам возьмёт следующий свободный порт и напечатает адрес
Обработка идёт очень долгоНачните с короткой записи на 30–60 секунд. Ограничения: до 10 минут и до 250 МБ

Больше случаев описано в подробном руководстве.


Что работает и что ещё нет

ВозможностьСтатус
Загрузка аудио/видео через браузер✅ проверены MP3, WAV и синтетическое MP4
Распознавание речи (Whisper small)✅ русский язык проверен; казахский и смешанный ещё проверяются
Разделение говорящих (pyannote)✅
Имена участников и ручные исправления с историей версий✅
Поручения, ответственные, сроки, саммари с цитатами (Qwen3-4B)✅ черновик, который проверяет человек
Экспорт протокола DOCX по двум шаблонам✅
Экспорт PDF❌ пока нет
Подключение к Zoom / Teams / Meet❌ пока нет, вход — файл записи

Все выводы модели — черновик. Каждое поручение нужно проверить по цитате-источнику, прежде чем отправлять протокол.

Свежий полный проход «аудио → текст → поручение → ручная правка → оба DOCX» проверен на синтетической записи 17 секунд: 3 минуты 41 секунда на CPU. Для этого примера WER/CER равны 0%; качество настоящих встреч, KK и смешанной речи требует отдельной оценки. Измерения и команды повторной проверки.

Полностью проверенный путь — Windows 10 x64. Скрипты для macOS и Linux используют те же зафиксированные версии библиотек и моделей, но на этих системах полный прогон ещё не выполнялся.


Для технической проверки

Запустить тесты после установки:

uv run --frozen pytest -q
uv run --frozen ruff check .

Стек: Python 3.11, FastAPI, SQLite, faster-whisper, pyannote.audio, llama.cpp + Qwen3-4B, python-docx. Docker, Node.js и облачные ключи не нужны. Сервер слушает только 127.0.0.1 и недоступен из сети.

Звёзды
⭐ 1
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
30
Авторы
3
Файлы
103
Ветки
1

Авторы коммитов

EricSpringfield01 13n.yerkanat 9ye.abuov 8

История коммитов

  • 2026-09-23 17:55style: brighten the JazAI interface colorsEricSpringfield01
  • 2026-09-23 17:50docs: clarify setup prerequisites and review steps before DOCX exportye.abuov
  • 2026-09-23 17:45docs: publish reproducible acceptance results and jury run instructionsye.abuov
  • 2026-09-23 17:43test: add real-model acceptance, transcription metrics and network guardsn.yerkanat
  • 2026-09-23 17:43fix: stop silent recordings early and clarify pipeline errorsn.yerkanat
  • 2026-09-23 17:24feat: add analysis review editor and template-based DOCX downloadsye.abuov
  • 2026-09-23 17:24docs: document review workflow and validated DOCX exportye.abuov
  • 2026-09-23 17:24feat: extract meeting indicators and problems with source validationn.yerkanat
Все коммиты (30)
  • 2026-09-23 17:24feat: persist analysis reviews and export versioned DOCX templatesn.yerkanat
  • 2026-09-23 17:20docs: add one-click launchers and a simple jury READMEEricSpringfield01
  • 2026-09-23 16:19docs: document local analysis setup and phase four validationye.abuov
  • 2026-09-23 16:19feat: display meeting actions and summaries with source playbackye.abuov
  • 2026-09-23 16:18feat: persist analysis jobs and expose revision-aware APIn.yerkanat
  • 2026-09-23 16:18feat: add local meeting extraction with evidence validationn.yerkanat
  • 2026-09-23 15:51docs: document jury setup and manual review workflowye.abuov
  • 2026-09-23 15:51feat: add speaker mapping and transcript editing interfaceye.abuov
  • 2026-09-23 15:50feat: persist manual transcript reviews with revision historyn.yerkanat
  • 2026-09-23 15:16feat: align transcript words with speaker intervalsEricSpringfield01
  • 2026-09-23 15:16feat: add recording upload API and durable processing workerEricSpringfield01
  • 2026-09-23 15:16feat: add JazAI upload and transcript review interfaceEricSpringfield01
  • 2026-09-23 15:16docs: describe web pipeline setup and phase two validationEricSpringfield01
  • 2026-09-23 14:55phase2ynurmakh
  • 2026-09-23 14:45feat: add local Whisper transcription probe and model preparationEricSpringfield01
  • 2026-09-23 14:45feat: add local community-1 speaker diarization probeEricSpringfield01
  • 2026-09-23 14:45docs: record phase one validation results and specification reviewEricSpringfield01
  • 2026-09-23 14:45build: lock optional speech recognition and diarization dependenciesEricSpringfield01
  • 2026-09-23 14:11docs: remove introductory preamble from autoprotocol promptEricSpringfield01
  • 2026-09-23 14:10chore: scaffold local autoprotocol infrastructure and implementation planEricSpringfield01
  • 2026-09-23 13:59docs: describe meeting protocol MVPynurmakh
  • 2026-09-23 13:55docs: add meeting auto-protocol implementation promptEricSpringfield01
Структура репозитория (103 файлов)
.env.example
.gitattributes
.github/workflows/ci.yml
.gitignore
.python-version
AUTOPROTOCOL_PROMPT.md
README.md
data/.gitkeep
docs/ALIGNMENT.md
docs/ARCHITECTURE.md
docs/DETAILED_GUIDE.md
docs/IMPLEMENTATION_PHASES.md
docs/MANUAL_REVIEW.md
docs/MODELS.md
docs/PHASE_1_REPORT.md
docs/PHASE_2_REPORT.md
docs/PHASE_4_REPORT.md
docs/PHASE_5_REPORT.md
docs/PHASE_6_REPORT.md
docs/PHASE_7_REPORT.md
docs/SPEC_REVIEW.md
docs/VERIFICATION.md
docs/diarization-model-manifest.json
docs/docx-template-manifest.json
docs/evaluation/e2e-video-20260923.json
docs/evaluation/e2e-wav-20260923.json
docs/evaluation/ru-smoke-20260923-hypothesis.json
docs/evaluation/ru-smoke-20260923-manifest.json
docs/evaluation/ru-smoke-20260923-metrics.json
docs/extraction-evaluation-v3.json
docs/extraction-evaluation.json
docs/llm-model-manifest.json
docs/stt-model-manifest.json
models/README.md
phase2.md
pyproject.toml
scripts/check_docx_layout.py
scripts/check_end_to_end.py
scripts/check_offline_guard.py
scripts/check_review_browser.py
scripts/evaluate_extraction.py
scripts/evaluate_transcription.py
scripts/offline_guard/USAGE.md
scripts/offline_guard/sitecustomize.py
scripts/prepare_diarization.py
scripts/prepare_docx_templates.py
scripts/prepare_llm.py
scripts/prepare_stt.py
scripts/run.ps1
scripts/setup.ps1
scripts/start_unix.sh
scripts/start_windows.ps1
scripts/synthesize_smoke.ps1
src/autoprotocol/__init__.py
src/autoprotocol/analysis.py
src/autoprotocol/analysis_review.py
src/autoprotocol/config.py
src/autoprotocol/diagnostics.py
src/autoprotocol/evaluation.py
src/autoprotocol/export_docx.py
src/autoprotocol/jobs.py
src/autoprotocol/launch.py
src/autoprotocol/main.py
src/autoprotocol/media.py
src/autoprotocol/pipeline/README.md
src/autoprotocol/pipeline/__init__.py
src/autoprotocol/pipeline/align.py
src/autoprotocol/pipeline/diarize.py
src/autoprotocol/pipeline/extract.py
src/autoprotocol/pipeline/transcribe.py
src/autoprotocol/review.py
src/autoprotocol/storage.py
src/autoprotocol/templates/protocol-1.docx
src/autoprotocol/templates/protocol-2.docx
src/autoprotocol/web/static/app.css
src/autoprotocol/web/static/app.js
src/autoprotocol/web/templates/index.html
src/autoprotocol/worker.py
start-linux.sh
start-macos.command
start-windows.bat
tests/fixtures/extraction_cases.json
tests/fixtures/extraction_ru.json
tests/fixtures/report_cases.json
tests/fixtures/ru_smoke.txt
tests/fixtures/schema_v5.sql
tests/fixtures/transcription_manifest.json
tests/test_align.py
tests/test_analysis.py
tests/test_analysis_review.py
tests/test_diarize.py
tests/test_evaluate_transcription.py
tests/test_export_docx.py
tests/test_extract.py
tests/test_infrastructure.py
tests/test_jobs.py
tests/test_launch.py
tests/test_media.py
tests/test_offline_guard.py
tests/test_review.py
tests/test_transcribe.py
tests/test_upload.py
uv.lock

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.