AAYMA
RU
Войти

Dauys Hunt

Локальный ИИ-ассистент для протоколов совещаний.

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

О проекте

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

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

Суть

Локальный ИИ-ассистент для протоколов совещаний. Распознаёт русскую, казахскую и смешанную речь, разделяет говорящих, извлекает поручения, решения и сроки. Контролирует исполнение (статусы, напоминания, ICS), экспортирует в PDF, DOCX и JSON; есть аккаунты пользователей.

Как устроено

PyAV приводит запись к моно 16 кГц, faster-whisper large-v3-turbo в int8 на CPU распознаёт речь; для казахского и смешанного режима есть отдельная казахская Whisper-модель. Диаризация: эмбеддинги WeSpeaker ResNet34-LM в ONNX и AgglomerativeClustering. Qwen3-4B Q4_K_M через llama.cpp по JSON-схеме извлекает поручения, длинные транскрипты режутся на части с перекрытием. Каждое поручение проверяется на ссылки на реплики, даты разбираются относительно даты встречи. FastAPI, очередь и SQLite; «радар внимания» подсвечивает проблемные поручения.

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

  • faster-whisper large-v3-turbo
  • Kazakh Whisper fine-tune INT8
  • WeSpeaker ResNet34-LM
  • AgglomerativeClustering diarization
  • JSON schema extraction
  • deadline normalization
  • ICS export

Особенности

Отдельная казахская ASR-модель для смешанной речи. Полностью офлайн на CPU, установка одной командой на Windows. CI собирает релизы. Сверх протокола есть контроль исполнения: статусы, просрочки, повестка следующей встречи, экспорт в календарь.

Стек

Python · FastAPI · Uvicorn · SQLite · ONNX Runtime · llama.cpp · ReportLab · python-docx · Vanilla JavaScript · GitHub Actions

Модели

Whisper large-v3-turbo · Kazakh Whisper large-v3-turbo · WeSpeaker ResNet34-LM · Qwen3-4B (llama.cpp)


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

README

README.md

Dauys Hunt — от голоса к действиям

Локальный ИИ-ассистент для протоколирования совещаний и контроля поручений.

Проект команды Armabulati для HackAlem AI. Помогает секретарю превратить запись встречи в транскрипт, краткое содержание и список действий с ответственными и сроками. Руководителю доступны статусы исполнения и напоминания.

Проверки и выпуск · Скачать релиз · Изменения 0.3.1

Аудио и текст обрабатываются на вашем компьютере. Облачные API для распознавания и анализа не используются. Интернет нужен для первоначальной установки и, если настроен, входа через Google/Facebook. Вход по email работает локально.

Вход и личное пространство

При открытии приложения доступны вход и регистрация по email. При регистрации пароль нужно ввести дважды. Первая регистрация автоматически переносит прежние совещания в созданный аккаунт. Другие пользователи получают отдельное пространство.

Google и Facebook подключаются через .env; до настройки ключей кнопки неактивны. Инструкция по аккаунтам, OAuth и безопасности.

Возможности

  • Личные аккаунты, регистрация по email, вход/выход, смена пароля и изоляция данных; подготовлены интеграции Google/Facebook.
  • Современная тема Dauys Hunt: индиго, бирюзовые и коралловые акценты, адаптивный экран входа.
  • Цвет поручения зависит от срока: спокойный голубой → янтарный → мягкий красный за день до срока; выполненные задачи зелёные.
  • Загрузка MP3, WAV, M4A, OGG, WEBM, MP4, FLAC, AAC и MKV; до 250 МБ и 2 часов.
  • Запись микрофона в браузере после подтверждения уведомления участников.
  • Локальное распознавание русского, казахского и смешанного языка; выбор языка в форме.
  • Акустическая диаризация: голосовые эмбеддинги WeSpeaker и кластеризация, автоматическое или заданное число говорящих.
  • Транскрипт с временными метками, прослушиванием записи, исправлением текста и говорящего.
  • Поручения, ответственные, формулировки сроков, решения и саммари от локальной языковой модели.
  • Ссылка каждого поручения на реплики-основания. Неоднозначные даты помечаются для проверки.
  • Подтверждение имён голосовых групп, редактирование и проверка поручений.
  • Статусы «К исполнению», «В работе», «Выполнено»; просрочка вычисляется по дате.
  • Общий список поручений, поиск, фильтры, напоминания о ближайших и просроченных сроках.
  • PDF, DOCX и JSON; опциональная замена известных имён при экспорте.
  • Отдельный импорт текстового транскрипта, явно помеченный как текстовый сценарий.
  • Локальная SQLite, очередь обработки, повтор после ошибки.
  • Быстрый и точный режимы распознавания; кэш повторной загрузки идентичных записей.
  • Транскрипт доступен ещё во время обработки; видны таймер, активность генерации и времена этапов.
  • «Радар внимания»: отсутствующий ответственный, неопределённый/неподтверждённый срок, просрочка и непроверенные задачи.
  • Поиск по исходным репликам с соседним контекстом и распределение длительности речи между голосовыми группами.
  • Повестка следующей встречи из открытых поручений; экспорт проверенных задач в календарь (ICS).
  • Ручное добавление пропущенных поручений с обязательной ссылкой на реплики-основания.
  • Единые SVG-иконки; подсказки через 1,5 секунды при наведении или фокусе с клавиатуры.

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

Проверенная среда: Windows x64, Python 3.12, CPU, 16 ГБ RAM. Рекомендуется закрыть тяжёлые приложения и иметь хотя бы 6 ГБ свободной RAM и 10 ГБ свободного места. GPU не обязателен. Обработка на CPU занимает минуты и зависит от длины записи.

git clone https://github.com/BAITC-Hacks/hack-2bfd8c42-armabulati.git
cd hack-2bfd8c42-armabulati
python --version
powershell -NoProfile -ExecutionPolicy Bypass -File setup.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File run.ps1

Если python не найден, передайте путь к Python 3.12:

powershell -NoProfile -ExecutionPolicy Bypass -File setup.ps1 -Python "C:\path\to\python.exe"

Откройте http://127.0.0.1:8765. Для последующих запусков достаточно start.cmd или run.ps1. Остановка — Ctrl+C в терминале. Не запускайте несколько серверов с одной базой данных.

Установка вручную:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.lock.txt
.\.venv\Scripts\python.exe scripts\setup_models.py
.\.venv\Scripts\python.exe -m uvicorn app.main:app --host 127.0.0.1 --port 8765

Скрипт скачивает Whisper large-v3-turbo для русского, специализированную казахскую Whisper large-v3-turbo, WeSpeaker ResNet34-LM, Qwen3-4B Q4_K_M и официальную CPU-сборку llama.cpp b11120. Казахские веса (~1,62 ГБ) один раз преобразуются в CPU INT8 (~0,81 ГБ); PyTorch и конвертер устанавливаются отдельно в runtime/asr-convert, при работе приложения не нужны. Ревизии зафиксированы в models.lock.json, версии Python-пакетов — в requirements.lock.txt. Локальный манифест сохраняется в models/manifest.json.

Обновление до 0.3.1: сохраните data/ и .env, остановите сервер, обновите исходники и выполните python scripts/setup_models.py. Для казахского и смешанного режима необходима новая модель. В старой записи нажмите «Распознать заново» и выберите «Қазақша» или «Қазақша + русский». Исходный протокол сохранится. Причина исправления и ограничения качества описаны в проверке речи.

Для закрытого контура выполните установку на разрешённой машине, затем перенесите исходники, models/, runtime/ и подготовленные для целевой ОС зависимости. Во время работы интернет не требуется. Виртуальные окружения не следует переносить между разными ОС и путями установки.

Linux

Автоматическое скачивание llama.cpp реализовано для Windows x64. На Linux необходимо самостоятельно установить/собрать совместимый llama-server, указать ALEM_LLAMA=/absolute/path/to/llama-server и установить DejaVu Sans (fonts-dejavu-core). Создайте venv, установите зависимости, выполните python scripts/setup_models.py, затем запустите Uvicorn. Linux-сценарий не проверен.

Сценарий для жюри

  1. Запустите приложение, зарегистрируйтесь или войдите; в «Состоянии системы» убедитесь, что установлены все четыре модели.
  2. Нажмите «Новое совещание», укажите тему и фактическую дату встречи. От неё считаются относительные сроки.
  3. Загрузите запись, выберите язык и, если известно, количество говорящих. Подтвердите уведомление участников.
  4. Дождитесь статуса «Готов к проверке». Модели действительно обрабатывают файл; готовые результаты по имени файла не подставляются.
  5. Откройте транскрипт, прослушайте реплики и подтвердите имена голосовых групп.
  6. В поручениях раскройте основание, уточните ответственного и дату, отметьте проверку и сохраните.
  7. Измените статус одного поручения на «Выполнено». Проверьте общий список и напоминания.
  8. Экспортируйте PDF и DOCX. Перезапустите приложение — результаты сохраняются.

Для быстрой проверки текстового сценария импортируйте examples/meeting-mixed.txt. Это синтетический пример RU/KZ, не тест распознавания речи. В нём два поручения и отклонённое предложение заказать сервер: последнее не должно становиться задачей.

Архитектура и технологии

Браузер: HTML / CSS / JavaScript
          │ localhost, HTTP
          ▼
FastAPI ───────── SQLite + локальные аудиофайлы
          │ последовательная очередь
          ▼
Отдельный Python-процесс
  PyAV → mono 16 kHz → faster-whisper (int8, CPU)
                    → слова и временные метки
  WeSpeaker ONNX → эмбеддинги → кластеризация голосов
          │ процесс завершён, память освобождена
          ▼
llama.cpp (localhost, временный API-ключ)
  Qwen3-4B → JSON по схеме → проверка ссылок на реплики
          │
  Разбор дат → поручения / решения / саммари
          ▼
Проверка секретарём → PDF / DOCX / JSON / контроль сроков

Языковая модель запускается на этапе анализа и завершается после него. Одновременно обрабатывается одно совещание. Длинные транскрипты разбиваются на части с перекрытием контекста.

КомпонентРеализация
API и очередьFastAPI, Uvicorn, ThreadPoolExecutor
ХранениеSQLite с WAL, каталог data/
ДекодированиеPyAV; отдельная установка FFmpeg не требуется
Speech-to-textfaster-whisper, Whisper large-v3-turbo
ДиаризацияWeSpeaker, ONNX Runtime, Kaldi fbank, AgglomerativeClustering
Анализ текстаQwen3-4B, llama.cpp, JSON schema
ЭкспортReportLab, python-docx
ИнтерфейсVanilla JavaScript, адаптивный CSS; без CDN и внешних шрифтов

Структура проекта

app/
  main.py       API, загрузка, редактирование
  speech.py     распознавание и диаризация
  analysis.py   локальная LLM, JSON-схема, проверка оснований
  pipeline.py   очередь и обработка ошибок
  dates.py      нормализация сроков и просрочка
  store.py      SQLite и журнал изменений
  export.py     PDF, DOCX, замена известных имён
web/            интерфейс
scripts/        установка моделей
examples/       синтетический текст для демонстрации
tests/          проверки логики, API и экспорта
models.lock.json
requirements.lock.txt
setup.ps1 / run.ps1 / start.cmd

Каталоги models/, runtime/, .venv/, data/ и пользовательские записи не публикуются в GitHub.

Проверки и фактический результат

.\.venv\Scripts\python.exe -m pytest -q
node --test tests/*.test.cjs

На Windows 23.09.2026: 34 Python-теста и 7 JavaScript-тестов пройдено. Проверены даты, статусы, основания, обезличивание, PDF/DOCX, защита API, хранение, кэш и изоляция его параметров, HTTP-сценарий загрузки/правок/повтора с подменённым ИИ, поиск, радар, повестка, безопасный ICS и состав выпускаемого архива. JavaScript-тесты проверяют задержку подсказок 1500 мс, отмену при уходе курсора, клавиатуру и исключение касаний. Дополнительно проверены регистрация/вход/выход, хеширование паролей, отзыв и срок сессий, CSRF, ограничение попыток, миграция прежних записей, запрет доступа другого аккаунта, изоляция кэша, OAuth state/PKCE/обмен кода с подменёнными ответами сервисов и переходы цветов дедлайна. Модели в автоматических тестах не скачиваются и не вызываются.

Полный запуск настоящих моделей на записи №2: 303,72 с до готовности, повторный импорт с теми же параметрами — 2,15 с. Получены 71 реплика и 5 поручений, проверены ответы экспорта PDF/DOCX. Это измерение на одном компьютере, не гарантия скорости или полноты. Условия и результаты проверок.

Для отдельной проверки настоящего аудиоконвейера запустите сервер и выполните:

.\.venv\Scripts\python.exe scripts/smoke_test.py "C:\path\meeting.mp3" --date 2026-09-23 --language ru --mode fast --repeat --email [email protected]

Скрипт запросит пароль аккаунта в терминале без отображения. Используйте запись, на обработку которой у вас есть право. Скрипт создаёт два совещания, проверяет PDF/DOCX и попадание повторного импорта в кэш. Времена этапов остаются локально в data/smoke-latest.json.

Скорость и полезные инструменты

Повторная запись кэшируется только внутри аккаунта владельца и определяется по SHA-256 содержимого, а не имени файла. Результат переиспользуется только при совпадении даты, языка, числа говорящих, режима и версии конвейера/манифеста моделей. Ручные правки и статусы исходного совещания не копируются. Удаление совещания-источника удаляет связанный кэш.

Быстрый режим сокращает число рассматриваемых вариантов распознавания с 3 до 1. Подходит для чистой записи, но может ухудшить точность; для сложной/смешанной речи оставлен точный режим по умолчанию. Просмотр транскрипта не требует окончания генерации саммари. Качество извлечения всё ещё требует проверки человеком.

Во вкладке «Инструменты» доступны радар проверки, баланс разговора, повестка и календарь. Баланс — доля длительности распознанных реплик, не оценка сотрудников. Поиск в транскрипте использует слова и их начала, а не генеративные ответы. В календарь попадают только незавершённые, проверенные поручения с подтверждённой датой.

CI/CD

Workflow .github/workflows/ci-release.yml запускается на push в main, pull request и вручную:

Статус на 23.09.2026: workflow добавлен, но первый запуск GitHub Actions остановлен до выделения runner из-за ограничения аккаунта организации. Успешный прогон Windows/Ubuntu и автоматический выпуск пока не подтверждены. Предварительные выпуски, проверенные только локально, явно помечаются Pre-release; их нельзя считать результатом CI.

  1. Устанавливает зафиксированные зависимости на Windows и Ubuntu, запускает тесты, проверку Python/JavaScript и сборку архива.
  2. Сохраняет JUnit-результаты проверок в Actions.
  3. Только после успешных проверок main собирает архив с SHA-256 и публикует GitHub Release с уникальным тегом build-<номер>-<commit>.

Архив содержит исходники и установочные скрипты. Модели, бинарные движки, записи, база, секреты и venv исключаются явным списком разрешённых файлов. После скачивания архива сначала выполните setup.ps1, затем start.cmd. Это автоматическая доставка приложения для локального запуска; размещения пользовательских данных на веб-сервере нет.

Реальная проверка предоставленного Совещание №1.mp3: 274,25 секунды, завершены распознавание, диаризация и анализ; сформировано 8 поручений. Число голосовых групп при этом запуске задано вручную — 6. В эталонном протоколе перечислено 10 поручений: результат требует проверки полноты и не является доказательством 100% точности. Запись, эталон и результат содержат пользовательские данные и в репозиторий не включены.

Проверка казахской и смешанной речи: добавлен воспроизводимый локальный замер WER/CER. Качество казахского и смешанного аудио, полнота поручений и точность границ говорящих пока не измерены на размеченной выборке. Тесты API не заменяют оценку моделей. Экспорт проверен программно; полная визуальная проверка всех вариантов длинных документов ещё не выполнена.

Соответствие кейсу

ТребованиеРеализация и граница проверки
Распознавание речиЛокальный Whisper; основной путь проверен на MP3 №1
РусскийПроверен основной аудиосценарий
Казахский / смешанныйМультиязычная модель, режимы kk / mixed; качество аудио отдельно не измерено
Ответственный и срокЛокальная LLM, исходные формулировки, редактор и подтверждение
Различение говорящихАкустические эмбеддинги и кластеризация; подтверждение имён человеком
Саммари и протоколЛокальная модель, транскрипт с таймкодами
PDF / DOCXОба формата, включая кириллицу
Закрытый контурЛокальные модели; runtime не скачивает модели автоматически
Контроль исполненияСтатусы, фильтры, просрочка, напоминания в интерфейсе

Приватность и известные ограничения

  • Внешние сервисы при установке: PyPI, Hugging Face и GitHub. Скачиваются веса и движок; содержимое совещаний не передаётся. Лицензии моделей и зависимостей определяются их авторами.
  • Сервер привязан к 127.0.0.1. Добавлены аккаунты, scrypt, HttpOnly-сессии, CSRF/Origin-проверки, ограничение попыток входа, CSP и изоляция данных. Нет корпоративного SSO/MFA, подтверждения email, шифрования SQLite/аудио и организационных ролей. Не публикуйте порт напрямую в интернет; подробнее — безопасность и OAuth.
  • Диаризация группирует похожие голоса, а не устанавливает личность. Шум, короткие реплики и одновременная речь ухудшают качество; число групп может быть неверным. Имена и привязки подтверждает секретарь.
  • Модель может пропустить поручение, ошибиться в имени, сроке или саммари. Существование реплик-оснований проверяется программно; достоверность вывода проверяет человек.
  • «К пятнице», «на следующей неделе», даты без года и нераспознанные сроки требуют подтверждения. Исходная формулировка сохраняется. Нормализация сложных казахских дат ограничена.
  • Повторы и уточнения через границы частей длинного транскрипта могут обрабатываться неточно.
  • Обезличивание заменяет известные имена буквальным совпадением. Склонения, организации и косвенные идентификаторы могут остаться. Перед демонстрацией реальных данных нужна ручная проверка.
  • Напоминания обновляются каждые 4 секунды в открытом приложении. Браузерные уведомления требуют разрешения; фоновой рассылки email/SMS при закрытом приложении нет.
  • Бот для Teams/Zoom/Google Meet, потоковая транскрибация, интеграция с СЭД и голосовая биометрическая идентификация не реализованы. Вход — запись файла или микрофона с последующей обработкой.
  • Удаление убирает запись и данные совещания из приложения; это не криптографическое стирание свободных страниц SQLite и резервных копий.

Развёртывание и развитие

Рабочая версия запускается локально. Публичного веб-деплоя нет. GitHub содержит исходники и инструкции; GitHub Pages не исполняет Python и локальные AI-модели этого проекта.

Для корпоративного размещения нужны сервер в закрытом контуре, корпоративная аутентификация/MFA, TLS, роли, управление хранением и резервными копиями. Направления развития: оценка RU/KZ/code-switching на размеченных записях, улучшение диаризации, сравнение полноты поручений с эталонами, фоновые уведомления и адаптеры СЭД.

Проект разработан с участием Codex. README описывает фактическую реализацию, а не гарантию оценки жюри.

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

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

Era0602 5

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

  • 2026-09-23 17:20fix: add specialized Kazakh ASR and protect mixed speech decodingEra0602
  • 2026-09-23 16:30feat: launch Dauys Hunt accounts, OAuth integration and deadline themesEra0602
  • 2026-09-23 15:39feat: add delayed icon tooltips and document measured verificationEra0602
  • 2026-09-23 15:17feat: improve meeting workspace, cache imports and automate verified releasesEra0602
  • 2026-09-23 14:47feat: add local Alem AI meeting assistant and Russian setup guideEra0602
Структура репозитория (59 файлов)
.env.example
.github/workflows/ci-release.yml
.gitignore
CHANGELOG.md
README.md
VERSION
app/__init__.py
app/analysis.py
app/auth.py
app/cache.py
app/config.py
app/dates.py
app/export.py
app/insights.py
app/main.py
app/pipeline.py
app/speech.py
app/speech_quality.py
app/store.py
docs/accounts.md
docs/speech-quality.md
docs/verification.md
examples/meeting-mixed.txt
models.lock.json
requirements.lock.txt
requirements.txt
run.ps1
scripts/check_speech.py
scripts/package_release.py
scripts/reset_password.py
scripts/setup_kazakh.py
scripts/setup_models.py
scripts/smoke_test.py
setup.ps1
start.cmd
tests/auth_helpers.py
tests/deadlines.test.cjs
tests/icon_tooltips.test.cjs
tests/test_api.py
tests/test_auth.py
tests/test_cache_release.py
tests/test_core.py
tests/test_insights.py
tests/test_retranscribe.py
tests/test_speech_check.py
tests/test_stream.py
tests/test_workflow.py
web/app.js
web/auth.js
web/dauys.css
web/deadlines.js
web/icons.css
web/icons.js
web/icons.svg
web/index.html
web/mark.svg
web/refinements.css
web/style.css
web/tools.js

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

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

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