AAYMA
RU
Войти

Система автопротоколирования совещаний

Локальный on-prem прототип: загрузка записи совещания → транскрипт RU/KZ/смешанный → диаризация → поручения с ответственными и сроками → протокол…

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

О проекте

Команда: Юфсшники
Кейс 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.md

hack-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/meetingsmultipart поле 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/tasksdashboard и вычисленный статус 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 пока не измерено; тесты не заменяют прогон с весами.

План по ТЗ

  1. FFmpeg → mono 16 kHz WAV, persistent job со статусами queued/running/completed/failed.
  2. faster-whisper: мультиязычный STT; pyannote: диаризация и временное совмещение реплик.
  3. Ручное сопоставление SPEAKER_00 с участником, затем локальный LLM с JSON Schema: саммари, поручение, ответственный, срок и цитата-основание. Проверка человеком обязательна.
  4. DOCX/PDF с RU/KZ шрифтом, предварительный просмотр и проверка экспорта.
  5. Дополнения: срочность/направление, напоминания, локальная рассылка и СЭД.

Подробная матрица требований и архитектура. Для демо используйте анонимизированные или синтетические RU/KZ/смешанные записи; участники должны быть уведомлены о записи и ИИ-транскрибации.

Многоэтапная проверка поручений, профиль Qwen3 и ограничения оценки: QUALITY_PIPELINE.md.

Живой режим

Windows: захват системного звука Teams/Zoom, промежуточный текст и черновые поручения, итоговая обработка после остановки. Настройка и ограничения.

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

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

Данияр р 15Daniyar 1

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

  • 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 комментариев

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

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