О проекте
Команда: Юфсшники
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
Локальный on-prem прототип: загрузка записи совещания → транскрипт RU/KZ/смешанный → диаризация → поручения с ответственными и сроками → протокол DOCX/PDF, дашборд задач и живой режим захвата звука Teams/Zoom.
Как устроено
FFmpeg конвертирует аудио в mono 16 kHz WAV, задание ставится в очередь SQLite и обрабатывается отдельным worker. faster-whisper (large-v3, GPU-профиль) распознаёт речь, pyannote.audio выполняет диаризацию, пользователь сопоставляет SPEAKER_XX с участниками. Локальный LLM через Ollama (профиль Qwen3) по JSON Schema извлекает саммари, поручения, ответственных, сроки и цитату-основание; непроверенные поручения помечаются. Экспорт в DOCX (python-docx) и PDF (ReportLab), FastAPI + Streamlit UI.
Ключевые решения
- faster-whisper large-v3
- pyannote диаризация
- grounded извлечение поручений с цитатой
- JSON Schema вывод LLM
- очередь заданий SQLite
- разрешение относительных сроков от даты совещания
Особенности
Полностью локальная обработка без облачных API (требование приватности), честная документация пробелов приёмки, сравнение STT RU/KZ на открытых записях и живой режим захвата системного звука Windows с черновыми поручениями.
Стек
Python · FastAPI · Streamlit · SQLite · FFmpeg · Ollama · python-docx · ReportLab · GitHub Actions · pytest · ruff
Модели
faster-whisper large-v3 · pyannote.audio · Qwen3 через Ollama
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-4b8f7014-team.
README
README.mdhack-4b8f7014-team
Hackathon team repository for Юфсшники
Система автопротоколирования совещаний
Локальный прототип для кейса Самрук-Казына: запись совещания → транскрипт на русском, казахском и смешанном языке → говорящие → поручения, ответственные, сроки → саммари и протокол DOCX/PDF. Аудио и текст не должны передаваться во внешние облачные API.
Текущий результат — первый интегрированный прототип. Добавлены очередь SQLite, отдельный worker, адаптеры локальных моделей, проверка поручений и DOCX/PDF. Для реального распознавания нужны модели и полный набор зависимостей. Проведено небольшое сравнение RU/KZ на шести открытых записях: результаты. Полная оценка качества на совещаниях и смешанной речи ещё не завершена. Тесты конвейера используют тестовые адаптеры, а не настоящие модели. Актуальный запуск обработки и ограничения: PIPELINE.md. Установка готовых моделей и результаты первого реального запуска компонентов: LOCAL_MODELS.md.
Быстрый запуск без моделей
Python 3.11+ (проверка основы выполнена на Python 3.12). Из корня репозитория:
python -m venv .venv
# Linux/macOS:
source .venv/bin/activate
# Windows PowerShell вместо предыдущей строки:
# .venv\Scripts\Activate.ps1
python -m pip install -r requirements-dev.txt
python -m uvicorn app.main:create_app --factory --host 127.0.0.1 --port 8000
Во втором терминале активируйте то же окружение:
python -m streamlit run app/ui.py
Откройте интерфейс и API документацию.
Загрузите запись, добавьте ручное поручение, назначьте ответственного и срок, измените статус.
Перезапуск сохраняет данные. Для настройки скопируйте .env.example в .env.
Оба процесса запускаются из корня репозитория. Порт API интерфейса фиксирован: 8000.
Допускаются WAV, MP3, M4A, OGG, FLAC, MP4, MOV, WEBM, MKV, до 200 MiB по умолчанию.
Сервер сохраняет поток под UUID, удаляет частичный файл при ошибке. Сейчас проверяются
расширение, непустой размер и лимит; фактический медиаконтейнер ещё не декодируется.
При изменении лимита синхронизируйте .env, Streamlit и будущий reverse proxy.
Структура
app/
main.py FastAPI и загрузки
ui.py Streamlit и dashboard
config.py локальные настройки
schemas.py контракт транскрипта, поручений и протокола
storage.py SQLite repository
pipeline.py интерфейсы STT, диаризации, извлечения и экспорта
models/ локальные веса (исключены из Git)
static/ локальные ресурсы и шрифты
templates/ место для шаблонов DOCX/PDF
data/ приватные файлы и SQLite (исключены из Git)
docs/ архитектура, требования, on-prem
tests/ проверки API и хранения
Локальные модели и зависимости
requirements-core.txt — запускаемая основа; requirements.txt добавляет faster-whisper,
pyannote.audio, Ollama client, python-docx и ReportLab. Установите полный набор для
следующего этапа: python -m pip install -r requirements.txt.
Нужны также FFmpeg и локальный сервер Ollama (Python-клиент сервер не устанавливает).
Torch/torchcodec и GPU-драйверы подбираются под платформу по документации pyannote.
Полный конвейер проверен на локальных русских примерах; диапазоны версий не являются lock-файлом.
Перед демо зафиксируйте разрешённые версии и проверьте их на целевой машине.
Подготовка пакетов и весов может требовать интернета и принятия лицензий; обработка записей после подготовки должна выполняться без сети. См. модели и развёртывание. Выбор модели не гарантирует качество казахского или смешанной речи: нужны собственные тестовые записи и оценка.
API
| Метод | Путь | Назначение |
|---|---|---|
| GET | /health | доступность основы; не готовность моделей |
| POST | /meetings | multipart поле file |
| GET | /meetings | список записей |
| POST | /meetings/{id}/process | очередь; JSON language/meeting_date |
| GET/PUT | /meetings/{id}/minutes | протокол / проверка саммари и имён |
| GET | /meetings/{id}/export/{format} | PDF или DOCX |
| PUT | /tasks/{id} | проверка и редактирование поручения |
| POST | /meetings/{id}/tasks | ручное поручение для проверки |
| GET | /tasks | dashboard и вычисленный статус overdue |
| PATCH | /tasks/{id} | статус pending / in_progress / completed |
Даты — ISO YYYY-MM-DD, просрочка вычисляется по локальной дате сервера. Относительные
сроки в будущем разрешаются относительно даты и часового пояса совещания, а не запуска модели.
Проверки
python -m pytest -q
python -m ruff check app tests
Проверки не скачивают модели и не отправляют данные наружу. Проверяются сохранение после перезапуска, лимиты загрузки, недопустимые файлы, безопасные имена, CRUD статусов и 501. Качество настоящих STT/диаризации/LLM пока не измерено; тесты не заменяют прогон с весами.
План по ТЗ
- FFmpeg → mono 16 kHz WAV, persistent job со статусами queued/running/completed/failed.
- faster-whisper: мультиязычный STT; pyannote: диаризация и временное совмещение реплик.
- Ручное сопоставление SPEAKER_00 с участником, затем локальный LLM с JSON Schema: саммари, поручение, ответственный, срок и цитата-основание. Проверка человеком обязательна.
- DOCX/PDF с RU/KZ шрифтом, предварительный просмотр и проверка экспорта.
- Дополнения: срочность/направление, напоминания, локальная рассылка и СЭД.
Подробная матрица требований и архитектура. Для демо используйте анонимизированные или синтетические RU/KZ/смешанные записи; участники должны быть уведомлены о записи и ИИ-транскрибации.
Многоэтапная проверка поручений, профиль Qwen3 и ограничения оценки: QUALITY_PIPELINE.md.
Живой режим
Windows: захват системного звука Teams/Zoom, промежуточный текст и черновые поручения, итоговая обработка после остановки. Настройка и ограничения.
Авторы коммитов
История коммитов
- 2026-09-23 17:59Document mandatory and bonus acceptance status honestlyДанияр р
- 2026-09-23 17:51Merge remote-tracking branch 'origin/main' into feat/local-meeting-baseДанияр р
- 2026-09-23 17:51Guard live capture against concurrent processingДанияр р
- 2026-09-23 17:49Add Windows live system-audio recording and provisional minutesДанияр р
- 2026-09-23 17:39Improve grounded task extraction and speaker attributionДанияр р
- 2026-09-23 17:28Merge pull request #1 from BAITC-Hacks/feat/local-meeting-baseDaniyar
- 2026-09-23 16:41Record full large-v3 meeting validation and remaining quality gapsДанияр р
- 2026-09-23 16:36Add large-v3 GPU profile and reproducible RU/KZ evaluationДанияр р
Все коммиты (16)
- 2026-09-23 16:11Add transcript correction and document remaining acceptance gapsДанияр р
- 2026-09-23 16:04Format minutes as speaker dialogue followed by summary and report tablesДанияр р
- 2026-09-23 15:54Preserve transcripts and flag unverified task evidence instead of abortingДанияр р
- 2026-09-23 15:38Clarify upload flow and select newly uploaded meetingДанияр р
- 2026-09-23 15:32Document successful local diarization and end-to-end smoke testsДанияр р
- 2026-09-23 15:18Provision local model tools and validate real STT and task extractionДанияр р
- 2026-09-23 15:06Wire durable local processing pipeline, review and DOCX PDF exportsДанияр р
- 2026-09-23 14:21Add local meeting minutes base with upload API and task dashboardДанияр р
Структура репозитория (53 файлов)
.env.example .github/workflows/checks.yml .gitignore .streamlit/config.toml README.md app/__init__.py app/adapters.py app/config.py app/exports.py app/extraction.py app/gpu.py app/live.py app/main.py app/pipeline.py app/schemas.py app/storage.py app/ui.py app/worker.py data/README.md docs/ACCEPTANCE.md docs/ARCHITECTURE.md docs/LIVE.md docs/LOCAL_MODELS.md docs/ON_PREM.md docs/PIPELINE.md docs/QUALITY_PIPELINE.md docs/STT_EVALUATION.md models/README.md pyproject.toml requirements-core.txt requirements-dev.txt requirements-gpu-windows.txt requirements-live.txt requirements-local.txt requirements-windows-tested.txt requirements.txt scripts/evaluate_extraction.py scripts/evaluate_stt.py scripts/login_hf_window.py scripts/make_test_audio.ps1 scripts/prepare_eval.py scripts/setup_models.py scripts/smoke_local.py scripts/start-local.ps1 static/README.md templates/README.md tests/test_api.py tests/test_extractor.py tests/test_grounded_extraction.py tests/test_live.py tests/test_pipeline.py tests/test_stt_evaluation.py tests/test_ui.py
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.