AAYMA
RU
Войти

GestSpeak

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

Доведённый продукт
Команда «gestspeak» 19💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: gestspeak
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Доведённый продукт

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

Суть

Локальный ассистент совещаний: из аудио/видео или транскрипта формирует протокол и поручения с ответственными и сроками, позволяет секретарю проверить их по цитатам и вести реестр исполнения с экспортом PDF/DOCX.

Как устроено

Аудио обрабатывается локальным faster-whisper (RU/KK/mixed) и диаризацией sherpa-onnx или pyannote, реплики сопоставляются по времени с голосовыми кластерами. Поручения и саммари извлекает локальная Ollama/Qwen2.5 либо, при её отсутствии, правила RU/KK; у каждого поручения сохраняется цитата и ID реплик, сроки считаются от даты встречи. FastAPI с очередью и SQLite, интерфейс на React/TypeScript, всё работает без облачных API.

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

  • faster-whisper
  • sherpa-onnx diarization
  • pyannote
  • Ollama Qwen2.5
  • rule-based извлечение поручений RU/KK
  • парсинг относительных сроков
  • привязка к цитатам
  • экспорт PDF/DOCX

Метрики

33 автопроверки пройдены; синтетическая RU-запись 9,6 с обработана Whisper tiny + sherpa-onnx за 33,7 с; 10 поручений с цитатами на тексте кейса

Особенности

Полностью закрытый контур (локальные веса, без облачных API), каждое поручение проверяемо по исходной цитате и ID реплик; честный отчёт VALIDATION с ограничениями (WER/DER не измерены, tiny ошибается).

Стек

Python · FastAPI · SQLite · TypeScript · React · Docker · Docker Compose · GitHub Actions

Модели

faster-whisper · Qwen2.5 (Ollama) · sherpa-onnx · pyannote · TitaNet


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

README

README.md

GestSpeak — обсудили, зафиксировали, выполнили

GestSpeak

Обсудили. Зафиксировали. Выполнили.

Локальный ассистент совещаний для кейса Самрук-Казына. Превращает запись или транскрипт в протокол, поручения с ответственными и сроками, а затем помогает контролировать исполнение. Русский, қазақша и смешанная речь; аудио и текст остаются внутри организации.

Быстрый запуск · Демо за 3 минуты · Установка моделей · API · Результаты проверок


От разговора до исполнения

01 · Записать02 · Проверить03 · Исполнить
Загрузите запись, включите микрофон или вставьте транскриптУточните имена, проверьте цитаты, ответственных и срокиСкачайте PDF/DOCX и отслеживайте поручения в общем реестре

Поручение можно проверить по источнику. У каждого действия сохраняются исходная цитата, ID реплик и произнесённый срок. Голосовой кластер и ответственный за поручение — отдельные сущности. Секретарь подтверждает результат перед исполнением.

Быстрый запуск

Нужно: Node.js 22.13+, npm и Python 3.9+. Установка зависимостей требует интернета.

git clone https://github.com/BAITC-Hacks/hack-a7c30eea-gestspeak.git
cd hack-a7c30eea-gestspeak
bash scripts/setup.sh
bash scripts/start-local.sh

Откройте http://127.0.0.1:8000 · документация API: http://127.0.0.1:8000/docs.

Повторный запуск: bash scripts/start-local.sh. Данные сохраняются в data/. Базовая установка включает текстовый сценарий, демо и экспорт; аудиомодели устанавливаются отдельно по инструкции. На машине финальной проверки лёгкий аудиопрофиль установлен и запущен.

Покажите жюри за 3 минуты

  1. Создайте результат через API: «Новое совещание» → «Текст» → пример «Русский» → уведомление участников → «Сформировать протокол».
  2. Проверьте поручение: откройте аудит датчиков; сравните цитаты и итоговый срок 15 октября после обсуждения двух и трёх недель.
  3. Подтвердите исполнителя и срок: сохраните поручение, переведите его в статус «В работе».
  4. Покажите контроль: откройте реестр поручений и напоминания, скачайте PDF или DOCX.
  5. Покажите языки: создайте встречу из казахского или смешанного текста. Укажите дату встречи для расчёта относительных сроков.

Для мгновенного обзора доступен «Открыть демопример» с десятью заранее размеченными поручениями. Он явно помечен в интерфейсе и экспортах; это пример рабочего процесса, а не результат распознавания. Дата 23.09.2026 выбрана как база относительных сроков, поскольку в исходном кейсе дата заседания не указана.

Возможности

ВозможностьКак реализована
Распознавание речи RU / KK / mixedЛокальный мультиязычный faster-whisper; качество зависит от выбранных весов
ДиаризацияЛокальная sherpa-onnx или pyannote; сопоставление голосовых интервалов словам по времени
Имена участниковРучная привязка голосового кластера к человеку
Поручения и саммариЛокальная Ollama / Qwen2.5; при её отсутствии — явно обозначенный режим правил RU/KK/mixed
Проверка результатаИсходные реплики, цитаты, редактирование, подтверждение ответственного и срока
Контроль исполненияСтатусы, фильтры, реестр и внутренние напоминания за 3 дня и при просрочке
ДокументыPDF со встроенным Noto Sans, DOCX и JSON; поддержка кириллицы и казахских символов
Аудио и видеоWAV, MP3, M4A, MP4, WEBM, OGG, FLAC, MOV; до 250 МБ и 2 часов; микрофон на localhost/HTTPS
Хранение и APISQLite, журнал событий, удаление встречи, FastAPI / OpenAPI
Закрытый контурЛокальные веса и шрифты, отключённая телеметрия, изолированная runtime-сеть Docker

Что проверено

ПроверкаФактический результат
Автоматические проверки33 различные проверки прошли: 29 базовых и 4 дополнительных аудиопроверки
ИнтерфейсTypeScript и производственная сборка выполнены; статический интерфейс отвечает HTTP 200
Текст кейса → живой API10 поручений, у каждого есть цитата и ID реплик; получены корректные PDF и DOCX
Локальный аудиопрогонСинтетическая RU-запись 9,613 с обработана Whisper tiny + sherpa-onnx за 33,70 с
Развёртывание на MacСлужба launchd, автозапуск, HTTP 200; ASR и диаризация доступны в /api/health

Границы результата. Tiny ошибается: в техническом прогоне были неверное имя и «38 сентября». Качество казахского и смешанного ASR, двухголосой диаризации и LLM не измерено. Ollama на машине проверки не установлена, поэтому поручения извлекаются локальными правилами. Десять поручений на тексте кейса — проверка конкретного сценария, а не общая метрика точности.

GitHub Actions настроен, но runner заблокирован биллингом организации. Docker/GPU и браузерный визуальный прогон не проверены. Полный отчёт с командами и артефактами: VALIDATION.md.

Архитектура

flowchart LR
    UI[Браузер] --> API[FastAPI · очередь]
    API --> W[Локальный Whisper]
    API --> D[sherpa-onnx / pyannote]
    W --> T[Реплики · голоса · время]
    D --> T
    API -->|Готовый текст| T
    T --> L[Локальная Ollama / правила]
    L --> V[Проверка цитат · сроки RU/KK]
    V --> DB[(SQLite)]
    DB --> H[Проверка секретарём]
    H --> DB
    DB --> E[PDF · DOCX · реестр · напоминания]

Сроки рассчитываются от даты встречи: «15 октября» использует её год, «к среде» — ближайшую среду с пометкой неоднозначности, «на следующей неделе» — рабочий интервал понедельник–пятница. Неизвестный срок остаётся пустым. Уточнения и смысловые выводы требуют проверки человеком.

Каталог / модульОтветственность
backend/gestspeakAPI, ASR, диаризация, извлечение, SQLite и экспорт
frontend/appИнтерфейс совещаний, поручений и проверки
backend/testsДаты, происхождение полей, API и документы
examplesRU, KK, mixed и синтетические записи
scriptsУстановка, модели, локальный запуск и служба macOS

Воспроизводимость

source .venv/bin/activate
pip install pytest==8.4.1 pypdf==5.9.0
PYTHONPATH=backend pytest backend/tests -q
cd frontend
npm run typecheck
npm run build

Тесты не измеряют WER/CER, DER или точность LLM. Для оценки нужны отдельные анонимизированные или синтетические записи с эталонными репликами, голосовыми интервалами, поручениями и сроками.

ДокументЧто внутри
ДемонстрацияСценарий защиты и последовательность действий
Установка и моделиCPU-профиль, полный AI-контур, Docker, GPU и автозапуск на Mac
APIЗапросы, асинхронная обработка, экспорт и ошибки
ПроверкиФактические результаты и ограничения
БезопасностьЛокальная обработка, доступ, хранение и границы прототипа

Ценность для заказчика

Секретарь получает черновик с проверяемыми источниками. Руководитель видит что сделать, кто отвечает и когда срок. История встречи, поручения и документы находятся в одном рабочем пространстве.

Критерий хакатонаЧто можно показать
Работоспособность · 25Путь от записи/текста до подтверждённого поручения и документа
Техническая реализация · 25Локальные модели, очередь, источники, календарные правила, API
README и воспроизводимость · 25Скрипты, примеры, подготовка весов, Docker и отчёт проверок
Ценность · 15Проверка секретарём, ответственные, сроки и контроль исполнения
Потенциал · 10JSON для СЭД, независимые AI-адаптеры, проверяемость результата

Баллы в таблице — веса организатора. Следующие этапы: измерение качества на данных заказчика, адаптер СЭД, уведомления, роли доступа и масштабирование очереди. Бот-участник Teams/Zoom/Meet, потоковая транскрипция, email, промышленная СЭД, SSO/RBAC и биометрическая идентификация пока не реализованы; записи платформ можно загрузить файлом.

Приватность и лицензии

Аудио и текст не отправляются во внешние облачные AI API. OpenAI/NVIDIA hosted API не используются: это ограничение кейса. NVIDIA GPU и TitaNet доступны в локальной конфигурации. Веса подготавливаются отдельно; при отсутствии моделей приложение сообщает об этом, сохраняя данные локально.

Базовый режим рассчитан на одного доверенного пользователя на localhost. Для сети нужны GESTSPEAK_API_TOKEN, внутренний TLS reverse proxy и точный список GESTSPEAK_ALLOWED_ORIGINS; подробности в SECURITY.md. Записи, база, .env и веса исключены из Git.

Код — MIT. Библиотеки и модели сохраняют собственные лицензии; Noto Sans — SIL OFL, pyannote требует принятия условий модели. GestSpeak не аффилирован с Notion или OpenAI.

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

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

Muhammad 15yarosru0235 1Zanderrr 1

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

  • 2026-09-23 17:59feat(web): shorten the live demo path and link tasks to their meetingMuhammad
  • 2026-09-23 17:58docs: polish jury presentation and organize setup and API guidesMuhammad
  • 2026-09-23 17:51feat(deploy): run the local application as a managed macOS serviceMuhammad
  • 2026-09-23 17:47fix(ai): verify native audio pipeline and record reproducible validationMuhammad
  • 2026-09-23 17:41docs: publish reproducible setup API guide and hackathon demo checklistMuhammad
  • 2026-09-23 17:40fix(api): recover contextual assignments and harden meeting lifecycleMuhammad
  • 2026-09-23 17:40feat(ai): add offline CPU speech and diarization model profileMuhammad
  • 2026-09-23 17:36fix(web): simplify workspace and make recording and review flows reliableMuhammad
Все коммиты (17)
  • 2026-09-23 17:05build: package isolated deployment and reproducible launch scriptsMuhammad
  • 2026-09-23 17:05docs: prepare judge quickstart, architecture and honest validation reportMuhammad
  • 2026-09-23 17:05test: verify multilingual deadlines, exports, persistence and access controlsMuhammad
  • 2026-09-23 17:05feat(web): build Notion-inspired meeting and assignment workspaceMuhammad
  • 2026-09-23 17:05feat(api): add meeting workflow, task review and PDF DOCX exportsMuhammad
  • 2026-09-23 17:05feat(ai): add offline ASR, diarization and evidence-checked task extractionMuhammad
  • 2026-09-23 17:05chore: establish local-only configuration and meeting data modelsMuhammad
  • 2026-09-23 15:12Create startyarosru0235
  • 2026-09-23 14:47Create StartZanderrr
Структура репозитория (73 файлов)
.dockerignore
.env.example
.github/workflows/ci.yml
.gitignore
Dockerfile
LICENSE
README.md
assets/fonts/NotoSans-Regular.ttf
assets/fonts/OFL.txt
backend/gestspeak/__init__.py
backend/gestspeak/dates.py
backend/gestspeak/demo.py
backend/gestspeak/engine.py
backend/gestspeak/exports.py
backend/gestspeak/lightweight_audio.py
backend/gestspeak/main.py
backend/gestspeak/schema.py
backend/gestspeak/store.py
backend/requirements-ai.txt
backend/requirements-light.txt
backend/requirements-tested.txt
backend/requirements.txt
backend/tests/conftest.py
backend/tests/test_api_regressions.py
backend/tests/test_core.py
backend/tests/test_extraction.py
backend/tests/test_lightweight_audio.py
compose.yaml
docs/API.md
docs/DEMO.md
docs/SECURITY.md
docs/SETUP.md
docs/VALIDATION.md
docs/audio-smoke.json
docs/cover.svg
docs/light-dependencies-manifest.json
docs/light-models-manifest.json
examples/audio/README.md
examples/audio/synthetic-russian.txt
examples/audio/synthetic-russian.wav
examples/audio/synthetic-two-speakers.wav
examples/kazakh.txt
examples/mixed.txt
examples/samruk.txt
frontend/.gitignore
frontend/.openai/hosting.json
frontend/app/globals.css
frontend/app/layout.tsx
frontend/app/page.tsx
frontend/components.json
frontend/components/ui/alert-dialog.tsx
frontend/components/ui/button.tsx
frontend/components/ui/checkbox.tsx
frontend/components/ui/dialog.tsx
frontend/components/ui/native-select.tsx
frontend/components/ui/table.tsx
frontend/components/ui/tabs.tsx
frontend/lib/sample-transcripts.ts
frontend/lib/utils.ts
frontend/next.config.ts
frontend/package-lock.json
frontend/package.json
frontend/public/favicon.svg
frontend/public/fonts/NotoSans-Regular.ttf
frontend/tsconfig.json
frontend/vite.config.ts
scripts/deploy-macos.py
scripts/dev.sh
scripts/prepare-light-models.py
scripts/prepare-models.py
scripts/setup.sh
scripts/smoke-local-audio.py
scripts/start-local.sh
Ветки (2)

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

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

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