О проекте
Команда: NeoForge
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
Локальный сервис автопротоколирования совещаний: распознаёт русскую, казахскую и смешанную речь, разделяет реплики по говорящим, выделяет поручения, ответственных и сроки, строит саммари и редактируемый черновик протокола с экспортом в PDF, DOCX и JSON.
Как устроено
Аудио из загрузки или с микрофона проходит локальный ASR на faster-whisper (small или large-v3) и диаризацию pyannote.audio. Сегменты привязываются к спикерам по временному пересечению или по word timestamps. Rule-based экстрактор для RU/KZ выделяет поручения, сроки и ответственных с evidence и флагом needs_review. Секретарь правит результат, ведёт статусы поручений и экспортирует через python-docx и ReportLab. В репозитории две версии: FastAPI (app/) и Express + React/Vite (server.ts).
Ключевые решения
- faster-whisper
- CTranslate2
- pyannote.audio diarization
- speaker overlap alignment
- rule-based извлечение поручений
- фоновая очередь задач
- optimistic locking (revision/409)
Особенности
Полностью on-premise обработка без внешних API, демо-протокол никогда не выдаётся за результат обработки аудио (ошибка LOCAL_ASR_UNAVAILABLE). В README остались неразрешённые маркеры merge-конфликта (<<<<<<< HEAD), и описаны две параллельные реализации.
Стек
Python · FastAPI · Node.js · Express · React · Vite · TypeScript · ffmpeg · python-docx · ReportLab · Docker
Модели
faster-whisper large-v3 · faster-whisper small · pyannote.audio
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-7c9c0671-neoforge.
README
README.mdMeeting Assistant — локальный автопротокол совещаний
<<<<<<< HEAD Meeting Assistant — локальный веб-сервис для автоматического протоколирования совещаний. Система распознаёт русскую, казахскую и смешанную речь, разделяет реплики по говорящим, выделяет поручения, ответственных и сроки, формирует краткое саммари и создаёт проверяемый черновик протокола. Секретарь может редактировать результат, отмечать проверенные данные, управлять статусами поручений и экспортировать протокол в PDF, DOCX или JSON. Обработка выполняется в фоновом режиме внутри закрытого контура: аудио и текст не передаются во внешние API или облачные сервисы.
Результат нельзя считать утверждённым протоколом без проверки человеком. Имена, формулировки поручений и сроки могут быть распознаны неверно.
Что реализовано
- загрузка MP3, WAV, M4A и OGG через адаптивный веб-интерфейс;
- локальное multilingual speech-to-text на русском, казахском и смешанной речи через
faster-whisper; - локальная диаризация через
pyannote.audioи привязка сегментов по временному пересечению; - ручная привязка
SPEAKER_00к имени участника; - выделение русских и казахских поручений, сроков и ответственных;
- evidence и флаг
needs_reviewу каждого кандидата; - саммари, метрики, транскрипт и экспорт PDF/DOCX/JSON;
- встроенный редактор: исправление названия, саммари, поручений, ответственных и сроков;
- современный responsive UI с drag-and-drop загрузкой, loading overlay, toast-уведомлениями и карточками поручений;
- статусы поручений «черновик / в работе / просрочено / выполнено» и отметка проверки секретарём;
- стабильные ID поручений: evidence сохраняется при сортировке и редактировании карточек;
- защита от одновременного перезаписывания через версию
revisionи ответ409 Conflict; - мини-дашборд по всем протоколам, поиск и фильтрация поручений по статусу;
- проверка реального формата аудио по сигнатуре файла, а не только по расширению;
- неблокирующий запуск тяжёлых ASR/диаризации, gzip и защитные HTTP-заголовки;
- фоновая очередь обработки с сохраняемым job-статусом и прогрессом по этапам;
- поиск и пагинация истории через параметры
q,limitиoffset; - локальная история последних 50 протоколов и повторное открытие результата;
- атомарное обновление JSON/PDF/DOCX без частично записанных файлов;
- два воспроизводимых demo-сценария по выданным письменным эталонам — без AI-моделей;
- лимит 100 МБ, валидация, безопасные ID и удаление исходного аудио после обработки;
- health endpoint и автоматические тесты.
Пользовательский сценарий
- Секретарь уведомляет участников о записи и получает согласие.
- Загружает запись, указывает название и при необходимости соответствие голосовых меток именам.
- Сервер локально выполняет ASR и диаризацию.
- Модуль извлечения формирует черновик поручений и саммари.
- Секретарь проверяет отмеченные поля и скачивает PDF, DOCX или JSON.
Для быстрой демонстрации достаточно нажать «Совещание №1» или «Совещание №2»: полный сценарий экспорта выполнится по эталонному тексту.
Архитектура
Browser -> FastAPI -> faster-whisper -> pyannote.audio
-> speaker overlap -> action/deadline rules
-> review draft -> PDF + DOCX + JSON
app/main.py API, валидация, хранение и endpoints
app/core.py ASR, диаризация, извлечение и экспорт
app/index.html семантическая HTML-разметка веб-интерфейса
app/static/ отдельные CSS и JavaScript frontend-модули
demo.py offline smoke demo по эталонам
tests/ unit- и API-тесты извлечения, редактора и экспорта
examples/ эталонные тексты и предоставленное аудио
outputs/ результаты демонстрации
Установка и запуск
Требования: Python 3.11/3.12 и ffmpeg в PATH.
Быстрый demo без моделей
py -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn app.main:app --host 127.0.0.1 --port 8000
Откройте http://127.0.0.1:8000 и выберите один из двух demo-примеров.
Обработка реального аудио
pip install -r requirements-audio.txt
$env:ASR_MODEL_DIR = "$PWD\models\faster-whisper-small"
$env:DIARIZATION_MODEL_DIR = "$PWD\models\pyannote-speaker-diarization"
uvicorn app.main:app --host 127.0.0.1 --port 8000
ASR_MODEL_DIR должен содержать полностью скачанную CTranslate2-модель Whisper. DIARIZATION_MODEL_DIR должен быть локальной pipeline-конфигурацией pyannote со всеми зависимыми весами. Код не скачивает модели во время обработки. На Linux активируйте окружение через source .venv/bin/activate, а переменные задайте через export.
Проверка
pip install -r requirements-dev.txt
python -m unittest discover -s tests -v
python demo.py
demo.py создаёт файлы в outputs/demo_1 и outputs/demo_2. Это проверка извлечения и экспорта по письменным эталонам, а не оценка ASR. Для end-to-end проверки установите обе модели и загрузите файлы из examples/audio/.
Health check: GET http://127.0.0.1:8000/health.
Основные API endpoints: POST /process, GET /jobs/{id}, POST /demo/{id}, GET /dashboard, GET /reports?q=&limit=50&offset=0, GET /reports/{id}, PUT /reports/{id} и GET /download/{id}/{kind}. POST /process возвращает 202 Accepted, после чего клиент следит за job до готовности. PUT принимает версию revision, только проверяемые поля и сохраняет исходный evidence и транскрипт.
Технологии, данные и приватность
Python, FastAPI, faster-whisper/CTranslate2, pyannote.audio, TorchAudio, ffmpeg, python-docx и ReportLab. Используются только предоставленные аудиозаписи и письменные протоколы. Внешние API и облачная передача данных отсутствуют. Реальные записи для демонстрации должны быть анонимизированы. Веса моделей и лицензии в репозиторий не входят.
Ограничения и развитие
- локальные модели нужно подготовить отдельно; CPU-обработка может быть медленной;
- диаризация выдаёт технические метки, а не надёжную биометрическую идентификацию;
- rule-based извлечение может пропускать поручения или создавать ложные кандидаты;
- нет live-подключения к Teams/Zoom/Meet, СЭД, напоминаний, авторизации и production-хранилища;
- следующий этап: редактор подтверждения, локальная LLM, нормализация дат, очередь задач и аудит доступа.
Deployed-версия отсутствует: прототип предназначен для локального запуска в закрытом контуре.
Прототип для транскрибации русской, казахской и смешанной речи, диаризации участников, извлечения поручений и экспорта протокола в DOCX/PDF/JSON. Аудио и текст обрабатываются внутри контура: внешних AI API в проекте нет.
Что действительно реализовано
- загрузка MP3/WAV/M4A/OGG/WebM/MP4 до настраиваемого лимита;
- запись с микрофона браузера и отправка в тот же локальный pipeline;
- локальный ASR на
faster-whisper(large-v3по умолчанию); - локальная диаризация на
pyannote.audioс привязкой каждого сегмента кSPEAKER_*; - ручное сопоставление
SPEAKER_00с ФИО и массовое переименование в интерфейсе; - извлечение поручений, ответственных и сроков для RU/KZ и смешанных формулировок;
- пометка неполных поручений как «Требует проверки»;
- редактирование стенограммы, саммари и поручений секретарём;
- статусы, приоритеты, категории и фильтры;
- управленческий command center: полнота данных, этапы обработки, срочные и ближайшие поручения;
- RU/KZ-календарь сроков: просрочка, приближение срока и локальные браузерные напоминания;
- дашборд исполнения со статусами «в работе / просрочено / выполнено»;
- центр интеграций: версионированный пакет СЭД, персональные выдержки и локальный RAM-outbox;
- автоматическое локальное сохранение последнего протокола между перезагрузками;
- экспорт в DOCX, печатную PDF-форму и JSON;
- три встроенных демонстрационных протокола и импорт готового текста;
- health-check, который показывает реальную готовность ASR и диаризации.
Важно: приложение не выдаёт демо-протокол за результат обработки загруженного аудио. Если локальные модели не настроены, API возвращает понятную ошибку LOCAL_ASR_UNAVAILABLE.
Архитектура
flowchart TD
A["Аудио или микрофон"] --> B["Express API"]
B --> C["faster-whisper large-v3"]
B --> D["pyannote.audio"]
C --> E["Сегменты и таймкоды"]
D --> E
E --> F["Локальный RU/KZ extractor"]
F --> G["React: проверка секретарём"]
G --> H["DOCX / PDF / JSON"]
G --> I["СЭД-пакет / локальный outbox"]
server.ts сохраняет загрузку во временный каталог ОС, запускает scripts/transcribe_local.py, получает JSON и удаляет временный файл в блоке finally. Python-процесс использует word timestamps для разбиения реплики на границах спикеров; если timestamps слов недоступны, применяется сопоставление сегмента по максимальному временному пересечению с pyannote.
Быстрый запуск на Windows
Рекомендуемая версия — Node.js 22 LTS с npm. Поддерживаемый Vite диапазон: Node.js ^20.19.0 либо >=22.12.0. Python, FFmpeg и ML-модели для просмотра интерфейса не требуются.
Запуск одним файлом
-
Полностью распакуйте архив, например в
C:\meeting-assistant. Не запускайте проект прямо внутри ZIP. -
Дважды щёлкните
START_WINDOWS.cmdлибо запустите его из PowerShell:Set-Location "C:\meeting-assistant" .\START_WINDOWS.cmd -
При первом запуске скрипт создаст
.envиз.env.windows.example, установит зависимости и после готовности сервера откроет браузер. -
Не закрывайте окно запуска. Для остановки сервера нажмите
Ctrl+C.
Рабочий адрес — http://localhost:3000. Адрес 0.0.0.0 используется только для привязки сетевого сервера и не предназначен для открытия в браузере.
Без Python и весов моделей работают встроенные демо, импорт RU/KZ/mixed-текста, извлечение поручений, редактирование и экспорт DOCX/PDF/JSON. Статус «Требуется настройка моделей» в окне On-Premise при таком запуске ожидаем.
Ручной запуск из PowerShell
Команда npm.cmd используется намеренно: она работает даже тогда, когда политика PowerShell запрещает выполнение npm.ps1.
Set-Location "C:\путь\к\распакованному\проекту"
if (-not (Test-Path .env)) { Copy-Item .env.windows.example .env }
npm.cmd ci --include=dev --no-audit --no-fund
npm.cmd run dev
Не вводите текст C:\путь\к\... буквально — подставьте фактическую папку, в которой находится package.json. После первого успешного запуска достаточно выполнить START_WINDOWS.cmd или npm.cmd run dev.
Linux/macOS
cp .env.example .env
npm ci
npm run dev
Проверка проекта
В PowerShell:
npm.cmd run verify
npm.cmd run benchmark
verify выполняет TypeScript-проверку, 40 автоматических тестов и production-сборку. Benchmark содержит шесть эталонных формулировок: по две RU, KZ и mixed. Дополнительные regression-тесты воспроизводят сложные конструкции из двух предоставленных протоколов: контекстный адресат, несколько поручений в реплике, подразделение как исполнитель и словесная дата. Результат 6/6 проверяет extractor, но не заменяет WER/DER-оценку реального аудио.
Настройка локального распознавания аудио на Windows
Для настоящей обработки аудио дополнительно нужны:
- Python 3.11 x64 (поддерживаются версии 3.10–3.12);
ffmpeg.exeиffprobe.exe, доступные черезPATH;- полный локальный каталог faster-whisper/CTranslate2
large-v3; - локальный pipeline pyannote с настоящим
config.yamlи всеми весами, на которые он ссылается; - несколько гигабайт свободного места; для быстрой обработки рекомендуется NVIDIA GPU, CPU подходит главным образом для короткого демо.
Создайте окружение без активации PowerShell-скриптов:
Set-Location "C:\meeting-assistant"
py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements-ml.txt
ffmpeg -version
ffprobe -version
Разместите модели, например так:
models/
├── faster-whisper-large-v3/
│ ├── config.json
│ ├── model.bin
│ └── ...
└── pyannote-speaker-diarization-3.1/
├── config.yaml
└── ...
config.yaml — это файл, а не имя каталога. Для полностью закрытого контура одного этого файла недостаточно: локально должны присутствовать snapshot pipeline, segmentation/embedding checkpoints и остальные зависимости, указанные в конфигурации. Веса не входят в архив проекта из-за размера и условий распространения.
Если .env ещё не создан, скопируйте Windows-шаблон. Затем проверьте пути:
if (-not (Test-Path .env)) { Copy-Item .env.windows.example .env }
notepad .env
Основные значения:
ASR_PYTHON=.venv/Scripts/python.exe
WHISPER_MODEL=./models/faster-whisper-large-v3
WHISPER_DEVICE=cpu
WHISPER_COMPUTE_TYPE=int8
DIARIZATION_MODEL=./models/pyannote-speaker-diarization-3.1/config.yaml
ALLOW_MODEL_DOWNLOAD=false
Пути с прямыми слешами корректны в Windows. В закрытом контуре оставьте ALLOW_MODEL_DOWNLOAD=false: Python-процесс принудительно работает в offline-режиме. Если организация отдельно разрешила первоначальную загрузку на подключённой машине, её нужно выполнить заранее, принять условия доступа к моделям pyannote и затем перенести полный локальный snapshot в контур. Само приложение не подменяет отсутствующие веса облачным API.
Убедитесь, что Python-пакеты установлены:
.\.venv\Scripts\python.exe -c "import faster_whisper, pyannote.audio; print('Python ML dependencies: OK')"
Запустите приложение в первом окне PowerShell:
.\START_WINDOWS.cmd
Пока сервер работает, запросите health-check во втором окне:
Set-Location "C:\meeting-assistant"
curl.exe -s http://localhost:3000/api/health
Полностью готовый контур возвращает "status":"ok", "asr_model":true и "diarization_model":true. Ответ 503 со статусом degraded означает, что сервер и демо работают, но в деталях перечислена отсутствующая часть ML-контура.
По умолчанию один файл ограничен 100 МБ и 4 часами (MAX_AUDIO_MB, MAX_AUDIO_DURATION_SECONDS); длительность проверяется до загрузки моделей, декодирование ограничено на уровне FFmpeg, а MAX_CONCURRENT_ASR_JOBS=1 защищает локальный CPU/GPU от параллельного переполнения.
Linux host
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements-ml.txt
cp .env.example .env
npm ci
npm run dev
В .env укажите существующие локальные пути к каталогу CTranslate2 и файлу pyannote config.yaml.
Docker
Положите локальные модели в ./models, скопируйте .env.example в .env, проверьте пути /models/..., затем:
docker compose up --build
Каталог моделей монтируется read-only. Сборка образа требует заранее доступных npm/pip-пакетов, а runtime-инференс при ALLOW_MODEL_DOWNLOAD=false выполняется без внешних модельных API. Образ большой, поскольку включает PyTorch, Whisper и pyannote.
Устранение проблем в Windows
PowerShell не находит папку проекта
Корень проекта — это уже та папка, где лежит package.json; дополнительной вложенной папки meeting-assistant может не быть. Проверьте текущую папку:
Get-Location
Test-Path .\package.json
Если результат True, оставайтесь в этой папке и запускайте .\START_WINDOWS.cmd. Если False, найдите фактический каталог:
Get-ChildItem "$env:USERPROFILE\Desktop" -Filter package.json -File -Recurse -ErrorAction SilentlyContinue | Select-Object -ExpandProperty DirectoryName
PowerShell запрещает npm.ps1
Сообщение «выполнение сценариев отключено в этой системе» относится к обёртке npm.ps1. Не меняйте системную политику: используйте START_WINDOWS.cmd или команды npm.cmd.
SIGINT, process terminated или вопрос о завершении пакетного файла
SIGINT означает, что установка была прервана, обычно нажатием Ctrl+C или закрытием окна. Дождитесь возвращения строки PS C:\...>; первая установка может занять несколько минут. После прерывания зависимости могут остаться неполными — снова запустите START_WINDOWS.cmd.
Cannot find package 'tsx' / ERR_MODULE_NOT_FOUND
Пакет tsx относится к dev-зависимостям. Такая ошибка означает незавершённую установку либо установку без dev-зависимостей:
Set-Location "C:\путь\к\проекту"
Remove-Item Env:NODE_ENV -ErrorAction SilentlyContinue
npm.cmd install --include=dev --no-audit --no-fund
npm.cmd run dev
EPERM: operation not permitted при очистке node_modules
Отдельное предупреждение npm warn cleanup ... EPERM не всегда фатально — сначала дождитесь итогового результата npm. Если установка завершилась ошибкой:
-
Остановите старый сервер через
Ctrl+Cи закройте редакторы/терминалы, использующие эту папку. -
Находясь именно в папке проекта, удалите только локальный
node_modulesи повторите установку:Test-Path .\package.json cmd /c rmdir /s /q node_modules npm.cmd cache verify npm.cmd ci --include=dev --no-audit --no-fund -
Если каталог всё ещё заблокирован, перезагрузите Windows и повторите команды до открытия VS Code. Не отключайте антивирус и не удаляйте каталоги вне проекта.
Путь с кириллицей поддерживается приложением и не являлся причиной ошибки tsx. Если сторонний Python/FFmpeg-инструмент всё же некорректно работает с таким путём, распакуйте проект в короткий ASCII-путь, например C:\meeting-assistant.
Сайт не открывается
- окно
START_WINDOWS.cmdилиnpm.cmd run devдолжно оставаться открытым; - открывайте
http://localhost:3000, а неhttp://0.0.0.0:3000; - если указан другой
PORTв.env, используйте его, напримерhttp://localhost:3001; - ошибка
EADDRINUSEозначает занятый порт: остановите предыдущий экземпляр либо изменитеPORTв.envи запустите снова; - если сервер завершился, читайте первую ошибку в окне запуска, а не сообщение браузера.
On-Premise показывает degraded
Это ожидаемо для UI-only запуска. Откройте детали health-check: он отдельно проверяет Python-пакеты, локальный каталог Whisper, файл config.yaml, зависимости pyannote и наличие FFmpeg в PATH.
Основной сценарий демонстрации
- Откройте «On-Premise» и покажите фактический статус обеих моделей.
- Загрузите короткую анонимизированную запись RU/KZ или запишите 30–60 секунд с микрофона.
- Покажите транскрипт с таймкодами и метками
SPEAKER_*. - Переименуйте спикера: имя обновится в транскрипте и связанных поручениях.
- На command center покажите полноту протокола, срочные поручения и этап проверки.
- Откройте поручение: продемонстрируйте цитату-основание, ответственного, срок и флаг проверки.
- Исправьте одно поле и нажмите «Одобрить все».
- Включите локальные напоминания и покажите счётчики «просрочено / скоро».
- Экспортируйте DOCX и PDF.
- После утверждения откройте «Интеграции»: поставьте пакет СЭД и персональные выдержки в локальный outbox, затем скачайте единый JSON-контракт.
Если ML-модели недоступны на машине жюри, используйте «Вставить текст» и казахский пример — это честный резервный сценарий проверки NLP и экспорта, а не имитация ASR. Полный текст выступления находится в DEMO_SCRIPT.md.
Результат проверки на предоставленных MP3/DOCX, найденные дефекты и границы проверки зафиксированы в REFERENCE_VALIDATION.md.
Формат текста для импорта
Имя спикера указывается отдельной строкой:
Протокол совещания
Тема: Производственная безопасность
Қанат Бауыржанұлы
Марат Серікұлы, до пятницы қауіпсіздік есебін дайындау.
Марат Серікұлы
Түсінікті, есепті жұмаға дейін жіберемін.
На этом примере фиксируются говорящий Қанат Бауыржанұлы, ответственный Марат Серікұлы, смешанная формулировка задачи и срок до пятницы.
API
| Метод | Маршрут | Назначение |
|---|---|---|
GET | /api/health | Реальная готовность локальных моделей |
GET | /api/demo/1..3 | Демо-протоколы RU/KZ |
POST | /api/analyze-text | Анализ готовой стенограммы |
POST | /api/process-audio | Локальный ASR + диаризация + извлечение поручений |
GET | /api/integrations/outbox | Метаданные локальных операций, без текста протокола |
POST | /api/integrations/outbox | Mock-коннектор СЭД/рассылки; только для утверждённого протокола |
Пример аудио-запроса:
curl -F '[email protected]' \
-F 'title=Еженедельное совещание' \
-F 'organization=Тестовая организация' \
-F 'speakers={"SPEAKER_00":"Айдана Серікқызы"}' \
http://localhost:3000/api/process-audio
Как извлекаются поручения
Детерминированный extractor ищет:
- RU-глаголы:
подготовить,провести,согласовать,проверить,направитьи другие; - KZ-глаголы:
дайындау,жасау,өткізу,тексеру,жіберу,келісу,ұйымдастыруи формы вежливого императива; - сроки: даты, дни недели, «до конца недели»,
бір апта ішінде,келесі аптада,10 қазанға дейін; - исполнителя после
ответственный/жауаптыили перед глаголом в прямом обращении.
Каждое поручение хранит speaker и evidence. Неясный исполнитель или срок не выдумывается: поле получает значение «Не указан / көрсетілмеген», а needs_review становится true.
Дополнительные возможности и границы
| Возможность | Статус прототипа |
|---|---|
| СЭД | Рабочий локальный контракт meeting-assistant.sed.v1, checksum и RAM-outbox; адаптер конкретной СЭД не входит в обязательную часть |
| Дашборд статусов | Реализован: pending / in progress / completed плюс вычисляемая просрочка и ближайший срок |
| Выдержки ответственным | Автоматически группируются по исполнителю и ставятся в локальный outbox; корпоративные адреса должны приходить из защищённого справочника |
| Срочность и направление | Реализованы классификация, ручная корректировка и фильтры |
| Голосовая идентификация | Не включена: есть диаризация и ручное подтверждение имени; биометрия требует согласия, локального реестра и отдельной оценки рисков |
| On-premise | Реализован локальный pipeline без внешних AI API; Docker и Windows-инструкция включены |
Mock-outbox не отправляет письма и не обращается к СЭД. Он доказывает API-контракт, проверку утверждения, формирование персональных пакетов и privacy-friendly журналирование. В RAM сохраняются только ID операции, тип, время и количество элементов; текст протокола не хранится.
Безопасность
- нет SDK и вызовов внешних AI API;
- аудио пишется только во временный каталог и удаляется после обработки, включая ошибки;
- аргументы Python-процесса передаются через
spawn, без shell-интерполяции; - размер загрузки ограничен, расширения и MIME проверяются;
- модели можно смонтировать read-only;
- утверждение секретарём остаётся обязательным human-in-the-loop шагом.
Для промышленной эксплуатации дополнительно нужны аутентификация/роли, журнал аудита, антивирусная проверка загрузок, секрет-хранилище, TLS на reverse proxy, резервное копирование БД и политика хранения утверждённых протоколов.
Ограничения прототипа
- подключение ботом к Teams/Zoom/Google Meet не реализовано; доступны файл и микрофон;
- для СЭД реализован mock-коннектор и контракт, но адаптер конкретного вендора не реализован;
- локальные браузерные напоминания работают только при открытом приложении; промышленный scheduler, e-mail и корпоративные каналы рассылки пока не подключены;
- голосовая биометрическая идентификация отсутствует: pyannote разделяет голоса, имя назначает секретарь;
- rule-based extractor прозрачен и проверяем, но уступает локальной LLM на сложных косвенных поручениях;
- качество code-switching зависит от качества записи и выбранной Whisper-модели;
- полная аудио-верификация требует локальных весов моделей, которые не включены в архив из-за размера и лицензирования.
Структура
server.ts Express API и orchestration
START_WINDOWS.cmd запуск и восстановление зависимостей в Windows
.env.windows.example шаблон конфигурации Windows host
scripts/transcribe_local.py faster-whisper + pyannote
src/services/analyzer.ts RU/KZ извлечение и статистика
src/services/reportBuilder.ts тестируемая сборка ASR-результата в протокол
src/services/exportService.ts DOCX/PDF/JSON
src/services/integrationService.ts СЭД-контракт и персональные выдержки
src/components/ интерфейс секретаря
src/data/mockData.ts три демонстрационных протокола
tests/ автоматические тесты и benchmark-фикстуры
AUDIT.md оценка до/после и оставшиеся риски
DEMO_SCRIPT.md сценарий защиты
REFERENCE_VALIDATION.md проверка на двух предоставленных совещаниях
Полезные команды
Windows PowerShell:
npm.cmd run dev # development server
npm.cmd run lint # TypeScript
npm.cmd test # unit-тесты
npm.cmd run benchmark # RU/KZ/mixed regression benchmark
npm.cmd run build # production bundle
npm.cmd run verify # все проверки
Linux/macOS:
npm run dev # development server
npm run lint # TypeScript
npm test # unit-тесты
npm run benchmark # RU/KZ/mixed regression benchmark
npm run build # production bundle
npm run verify # все проверки
620a53f (Meeting Assistant: рабочий прототип)
Авторы коммитов
История коммитов
- 2026-09-23 17:41Delete .env.windows.exampleEdvsn555
- 2026-09-23 17:41Delete .env.exampleEdvsn555
- 2026-09-23 17:40Delete .envEdvsn555
- 2026-09-23 17:39Add files via uploadEdvsn555
- 2026-09-23 17:37Update README and VS Code launch configurationDell
- 2026-09-23 16:48Update meeting assistant code, interface and testsDell
- 2026-09-23 16:18Update meeting assistant prototypeDell
- 2026-09-23 16:05Update meeting assistant prototypeDell
Все коммиты (15)
- 2026-09-23 15:55Update projectDell
- 2026-09-23 15:52Update projectDell
- 2026-09-23 15:44Update projectDell
- 2026-09-23 14:51Update projectMaksat Niyazov
- 2026-09-23 14:24Update projectMaksat Niyazov
- 2026-09-23 14:03Resolve README conflict and keep project documentationMaksat Niyazov
- 2026-09-23 13:55Initial NeoForge projectMaksat Niyazov
Структура репозитория (30 файлов)
.dockerignore .gitignore AUDIT.md DEMO_SCRIPT.md Dockerfile README.md REFERENCE_VALIDATION.md START_WINDOWS.cmd app/core.py app/index.html app/main.py app/static/app.js app/static/styles.css demo.py docker-compose.yml examples/meeting_1_reference.txt examples/meeting_2_reference.txt index.html metadata.json package-lock.json package.json requirements-audio.txt requirements-dev.txt requirements-ml.txt requirements.txt server.ts tests/test_api.py tests/test_core.py tsconfig.json vite.config.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.