О проекте
Команда: 404 Team Not Found
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
Локальное (on-prem) протоколирование совещаний на RU/KK/mixed. Windows EXE на C#/WinForms работает с FastAPI-backend, который выдаёт транскрипт с таймкодами и анонимными говорящими, резюме, поручения с цитатой-источником и экспорт в DOCX/PDF.
Как устроено
EXE загружает запись в FastAPI, там один последовательный worker. FFmpeg нормализует аудио в mono PCM16 WAV 16 kHz. faster-whisper large-v3 распознаёт речь, pyannote.audio Community-1 выполняет диаризацию, сегменты объединяются по таймкодам. Qwen3:4b в локальном Ollama извлекает резюме и поручения (суть, ответственный, срок, автор, цитата) с проверкой источников. Результаты хранятся в SQLite, экспорт через python-docx и ReportLab. Всё работает на ПК пользователя или в LAN.
Ключевые решения
- faster-whisper large-v3
- pyannote Community-1 diarization
- Qwen3 via Ollama
- speaker-grounded attribution
- sequential model queue
Метрики
запись 274,25 с: STT 41,48 с, диаризация 16,09 с, анализ Ollama 18,84 с, 7 поручений; 22 backend-теста, 43 AI-теста, 10/10 проверок EXE→API
Особенности
Полностью локальный стек без облачных API: Whisper, pyannote и Qwen3 через Ollama. Нативный Windows-клиент без Python и браузера. Автор поручения подтверждается цитатой и говорящим из диаризации. Документация честно отделяет проверенное от непроверенного.
Стек
C# · WinForms · .NET Framework 4.8 · Python · FastAPI · SQLite · FFmpeg · Torch · python-docx · ReportLab · Streamlit
Модели
Whisper large-v3 (faster-whisper) · pyannote Community-1 · Qwen3:4b (Ollama)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-c5aa2345-404-team-not-found.
README
README.mdSAMRUK KAZYNA
Из записи совещания — в проверяемый протокол и поручения.
Проект команды 404-team-not-found для HackAlem: локальное протоколирование совещаний на русском, казахском и смешанном языке. Основной клиент — Windows EXE на C# / Windows Forms. AI-модели и Python backend размещаются на компьютере пользователя или сервере в его локальной сети.
Статус: Windows EXE и backend соединены по целевому API. Реализованы загрузка, последовательная очередь моделей, SQLite, объединение timestamps и DOCX/PDF. Связка настоящего native-клиента с настоящим FastAPI прошла 10/10 проверок с синтетическими моделями. Финальный прогон всей системы на реальной записи и GPU компьютера Local AI ещё требуется.
Проверка для жюри · Архитектура · Результаты и воспроизведение проверок · Все документы
Состояние проекта перед сдачей — что передано, какие проверки выполнены и что ещё требует подтверждения.
Проблема и польза
Секретари, руководители проектов и производственные команды вручную переносят решения встреч в протоколы. В длинной записи легко потерять поручение, перепутать ответственного или срок. Для русско-казахских совещаний дополнительно важно сохранить исходный язык реплик и технические термины.
Целевой результат системы:
- транскрипт с временными метками и анонимными говорящими;
- краткое резюме;
- поручения: суть, ответственный, срок, автор и цитата-источник;
- DOCX/PDF для проверки и передачи команде.
Человек сверяет результат с записью. Если имя или срок неизвестны, система должна оставить их неизвестными. Цитата и говорящий помогают проверить основание поручения. Ожидаемая польза — меньше ручного переноса текста и пропущенных решений; экономия времени и качество на представительной выборке пока не измерены.
Что работает сейчас
| Часть | Реализовано | Граница готовности |
|---|---|---|
| Windows-клиент | Выбор записи, настройки сервера, история/API-клиент, просмотр результата | 10/10 проверок EXE → настоящий FastAPI/SQLite/worker/export с синтетическими моделями; реальный GPU-прогон впереди |
| Явное демо | RU/KK-транскрипт, резюме, поручения и локальный DOCX | Синтетические данные; выбранная запись не обрабатывается |
| Backend | FastAPI, загрузка, один worker, SQLite, нормализация WAV, статусы, результат и экспорт | 22 backend-проверки; реальная запись на ПК Local AI ещё требуется |
| Local AI | Whisper, Community-1, Qwen3/Ollama, проверка источников; адаптеры подключены к worker | Реальные модели проверялись отдельно, интегрированный GPU-прогон пока не выполнен |
| Серверный PDF через ReportLab, запрос из EXE, системная печать демо | Серверный экспорт проверен на синтетическом результате; системная печать демо не проверена | |
| Прежний UI | Streamlit-прототип сохранён в frontend/ | Отдельный стек и прежний API; не входит в основной EXE |
Поручения в нативном клиенте доступны только для просмотра. Редактирование, дашборд статусов, присоединение к Teams/Zoom/Meet и напоминания не входят в работающий сценарий текущего EXE. Подробности — план развития.
Быстрый запуск: Windows-клиент и демо
Нужны Git, доступ к репозиторию, Windows и .NET Framework 4.8+.
Сборочный скрипт использует системный csc.exe; если компилятор отсутствует,
он сообщает о необходимости .NET Framework Developer Pack.
git clone https://github.com/BAITC-Hacks/hack-c5aa2345-404-team-not-found.git
cd hack-c5aa2345-404-team-not-found
.\desktop\build-native.ps1
.\desktop\release\SAMRUK-KAZYNA.exe
Если репозиторий уже получен, выполняйте последние две команды из его корня. В окне приложения нажмите «Открыть демо», просмотрите резюме, транскрипт и поручения, затем сохраните DOCX. Backend и модели для этого не нужны.
Клиент не требует Python, Node.js, браузера или WebView2. .NET Framework является
системной зависимостью. Отдельный сервер Python и модели в EXE не входят.
Файл EXE не хранится в Git, опубликованного Release пока нет: на новом клоне
desktop/release/ появится после сборки. Полученный SHA-256:
Get-FileHash .\desktop\release\SAMRUK-KAZYNA.exe -Algorithm SHA256
Сборка не подписана. Ранее она запускалась на Windows 11 / .NET Framework 4.8.1; чистый второй ПК ещё не проверен. Подробная инструкция клиента и отчёт с параметрами проверенного артефакта.
Запуск текущего backend
На готовом ПК Local AI используйте существующее окружение с моделями и работающей Ollama. Полная инструкция запуска описывает безопасное обновление main, диагностику и LAN. Из корня свежего checkout:
. .\scripts\local-ai\ai-env.ps1 -VenvPath 'C:\Users\Amankos\Downloads\Hakaton\.venv'
& $env:HACKALEM_PYTHON -m pip install -r .\backend\requirements-runtime.txt
& $env:HACKALEM_PYTHON -m pip check
.\scripts\start-backend.ps1 -VenvPath 'C:\Users\Amankos\Downloads\Hakaton\.venv'
Скрипт запускает один worker без access logs. Модели, Torch и CUDA повторно не устанавливайте: runtime-файл содержит только лёгкие зависимости API/экспорта. Оставьте терминал работающим. Во втором терминале:
Invoke-RestMethod http://127.0.0.1:8000/health | ConvertTo-Json -Depth 6
.\desktop\build-native.ps1
.\desktop\release\SAMRUK-KAZYNA.exe
Ожидается status: "ok", local_only: true и модули ready. Без локальных
ресурсов health возвращает not_ready, загрузка — 503. Изучите
processing_modules; health проверяет ресурсы и Ollama, но не выполняет inference.
Swagger: http://127.0.0.1:8000/docs. Остановка сервера — Ctrl+C.
В EXE задайте http://127.0.0.1:8000 для того же ПК. Для другого ПК запустите
скрипт с -BindAddress <LAN-IP-сервера> и используйте этот адрес в клиенте.
Без моделей на новом ПК можно установить backend/requirements-runtime.txt
в Python 3.11 venv и запустить uvicorn app.main:app --app-dir backend --host 127.0.0.1 --port 8000 --workers 1; health будет not_ready.
Настройки читаются из переменных окружения, .env автоматически не загружается.
Корневой requirements.txt относится к прежнему Streamlit-стеку. Приватное
хранилище по умолчанию — %LOCALAPPDATA%/SAMRUK_KAZYNA/meetings.
Локальные модели
Local AI: установка и воспроизведение — отдельная инструкция для серверного ПК. Она описывает окружение, веса, FFmpeg, Ollama и прямые проверки адаптеров. Первичная установка и скачивание моделей требуют сети; последующая обработка должна выполняться локально.
По отчёту Local AI модели запускались на ПК участника, в том числе на 90-секундном фрагменте при блокировании внешних Python-соединений. Это не проверка всего приложения без интернета. WER/DER и точность извлечения поручений на эталонной выборке пока не установлены.
Обновлённый отчёт содержит отдельный прогон полной записи 274,25 с:
STT — 41,48 с, диаризация — 16,09 с, анализ Ollama — 18,84 с,
получено 7 поручений. Это времена отдельных этапов, не время полного сценария.
Для диаризации потребовалось преобразование MP3 в mono PCM16 WAV 16 kHz;
новый backend делает эту подготовку и передаёт один WAV обоим адаптерам.
Эту интеграцию ещё нужно проверить на GPU; ручная проверка качества не завершена.
Новый CLI scripts/local-ai/evaluate-meeting.py воспроизводит этапы диагностики,
но его новая версия целиком на реальной записи ещё не запускалась.
Технологии и устройство
| Компонент | Технологии | Роль |
|---|---|---|
| Основной клиент | C# 5, WinForms, .NET Framework 4.8+, HttpClient | Один EXE, формы, HTTP-клиент, локальный демо-DOCX |
| API | Python, FastAPI, Pydantic, Uvicorn | Загрузка, статусы, очередь и схемы |
| STT | faster-whisper 1.2.1 / Whisper large-v3 | Текст на исходном языке и timestamps |
| Диаризация | pyannote.audio 4.0.7 / Community-1 | Анонимные интервалы говорящих |
| Анализ | Qwen3:4b через локальный Ollama | Резюме и поручения с проверкой источников |
| Аудиосреда | FFmpeg, Torch/TorchCodec | Декодирование и runtime моделей |
| Хранение и экспорт | SQLite, python-docx, ReportLab | История, результаты и серверный DOCX/PDF |
AI используется как последовательность специализированных этапов. Самостоятельного агента, который подключается к встречам или выполняет поручения, в текущем коде нет. Схема модулей и потока данных.
Как оценить решение
- Пройдите сценарий жюри: демо EXE, DOCX, состояние backend.
- Сопоставьте показанное с API-контрактом и исходниками.
- При необходимости воспроизведите отдельные проверки компонентов.
- Для AI подготовьте согласованную запись и эталон, следуя инструкции Local AI.
- На ПК Local AI выполните оставшийся реальный прогон: EXE → загрузка → completed → проверка RU/KK-текста и поручений → DOCX/PDF. При failed сохраните безопасный текст ошибки, не подменяйте результат демо.
Подтверждённые результаты: 22 backend-теста, 43 автономных AI-теста (29 адаптеров + 14 диагностики), 10 native EXE → настоящий API проверок с синтетическими моделями и отдельно 21 native-проверка с тестовым сервером. GUI и реальные модели описаны в handoff. Эти числа не измеряют качество речи. Реальный GPU-прогон всей системы ещё не подтверждён.
Скриншоты
Снимки настоящего окна клиента; показанные данные синтетические.


Транскрипт RU/KK · Настройки подключения
Навигация по репозиторию
desktop/native/ основной Windows-клиент
desktop/build-native.ps1 сборка EXE и SHA-256
backend/app/ API, очередь, SQLite, AI-адаптеры и экспорт
backend/tests/ backend и native→API проверки
backend/tests/local_ai/ автономные проверки адаптеров
scripts/start-backend.ps1 запуск в готовом AI-окружении
scripts/local-ai/ диагностика и прямой запуск локальных моделей
samples/ синтетические JSON-примеры
frontend/ сохранённый Streamlit-прототип
docs/ инструкции, архитектура, отчёты, сценарий жюри
Команда и зоны ответственности · Roadmap · Критерии сдачи. Модели, записи, транскрипты пользователей, окружения, EXE и секреты исключены из Git. Доступ к закрытому репозиторию и передача собранного EXE жюри организуются командой.
Авторы коммитов
История коммитов
- 2026-09-23 17:58Record successful native EXE local AI processing and DOCX PDF exportTrustHorn
- 2026-09-23 17:52Record submission snapshot and verified project resultswthman2
- 2026-09-23 17:47Merge local meeting backend with current team documentationwthman2
- 2026-09-23 17:43Connect native client to local meeting pipeline and DOCX PDF exportswthman2
- 2026-09-23 17:40Merge current main and document full-recording AI reproductionbta2602
- 2026-09-23 17:37Clarify project documentation and jury verification workflowbta2602
- 2026-09-23 17:22Publish reproducible Local AI evaluation and backend integration handoffTrustHorn
- 2026-09-23 17:21Update project status after full-recording Local AI handoffwthman2
Все коммиты (24)
- 2026-09-23 17:14Merge remote-tracking branch 'origin/main' into codex/local-ai-setupTrustHorn
- 2026-09-23 17:08Document full-recording PDF comparison and local Ollama evaluationTrustHorn
- 2026-09-23 17:08Document merged native client and verified local AI adapterswthman2
- 2026-09-23 17:06Merge verified local AI adapters into native Windows projectwthman2
- 2026-09-23 16:58Add native Windows client for meeting protocol APIwthman2
- 2026-09-23 16:48Ground task authors in speaker evidence and verify offline Community-1TrustHorn
- 2026-09-23 16:48Merge remote-tracking branch 'origin/main' into codex/local-ai-setupTrustHorn
- 2026-09-23 16:21Merge origin/main into codex/streamlit-frontendbta2602
- 2026-09-23 16:18Merge remote-tracking branch 'origin/main' into codex/local-ai-setupTrustHorn
- 2026-09-23 16:18Add local AI adapters, reproducible setup and verified handoffTrustHorn
- 2026-09-23 16:04Retarget SAMRUK KAZYNA to Windows EXE and document jury verificationwthman2
- 2026-09-23 16:00Add Streamlit meeting frontend and backend integrationbta2602
- 2026-09-23 15:45Coordinate backend, local AI and Android APK workwthman2
- 2026-09-23 15:15Prepare on-premise meeting protocol scaffoldwthman2
- 2026-09-23 15:12Clear READMEbta2602
- 2026-09-23 14:58Initial meeting protocol backendTrustHorn
Структура репозитория (123 файлов)
.env.example .gitignore .streamlit/config.toml AGENTS.md README.md ROADMAP.md backend/.gitignore backend/README.md backend/app/__init__.py backend/app/api/__init__.py backend/app/api/routes.py backend/app/core/__init__.py backend/app/core/config.py backend/app/core/errors.py backend/app/main.py backend/app/models/__init__.py backend/app/models/domain.py backend/app/pipeline.py backend/app/schemas/__init__.py backend/app/schemas/meeting.py backend/app/services/__init__.py backend/app/services/diarization/__init__.py backend/app/services/diarization/base.py backend/app/services/diarization/local.py backend/app/services/diarization/placeholder.py backend/app/services/export/__init__.py backend/app/services/export/base.py backend/app/services/export/local.py backend/app/services/llm/__init__.py backend/app/services/llm/base.py backend/app/services/llm/local.py backend/app/services/llm/placeholder.py backend/app/services/stt/__init__.py backend/app/services/stt/base.py backend/app/services/stt/local.py backend/app/services/stt/placeholder.py backend/app/storage.py backend/requirements-ai.txt backend/requirements-api.txt backend/requirements-runtime.txt backend/requirements.txt backend/tests/local_ai/test_adapters.py backend/tests/local_ai/test_attribution.py backend/tests/local_ai/test_diagnostics.py backend/tests/local_ai/test_evaluation.py backend/tests/native_api_check.cs backend/tests/run_native_api_check.py backend/tests/test_backend_api.py backend/tests/test_contracts.py backend/tests/test_pipeline.py desktop/PORTABLE-README.txt desktop/SAMRUK-KAZYNA.spec desktop/build-native.ps1 desktop/build-webview-experiment.ps1 desktop/build.ps1 desktop/launcher.py desktop/native/ApiClient.cs desktop/native/LocalExport.cs desktop/native/MainForm.cs desktop/native/Models.cs desktop/native/Program.cs desktop/native/Settings.cs desktop/native/app.manifest desktop/package.py desktop/requirements-build.txt desktop/requirements-lock.txt desktop/tests/native_checks.cs desktop/tests/run-native-checks.py docs/README.md docs/api-contract.md docs/architecture.md docs/backend-launch.md docs/desktop/README.md docs/desktop/handoff.md docs/hackathon-checklist.md docs/integration-notes.md docs/jury-guide.md docs/local-ai/README.md docs/local-ai/handoff.md docs/screenshots/native-demo-summary.png docs/screenshots/native-demo-tasks.png docs/screenshots/native-demo-transcript.png docs/screenshots/native-settings.png docs/submission-status.md docs/team-prompts.md docs/team-workflow.md docs/verification.md frontend/README.md frontend/__init__.py frontend/api_client.py frontend/api_mock.py frontend/app.py frontend/components/__init__.py frontend/components/dashboard.py frontend/components/history.py frontend/components/layout.py frontend/components/meeting.py frontend/components/sidebar.py frontend/demo_data.py frontend/desktop_settings.py frontend/exporters.py frontend/requirements.txt requirements.txt samples/README.md samples/api/meeting-completed.json samples/expected_analysis.json samples/mixed_ru_kk_transcript.json scripts/README.md scripts/local-ai/ai-env.ps1 scripts/local-ai/check-llm-cases.py scripts/local-ai/check-local-ai.py scripts/local-ai/check-recording-results.py scripts/local-ai/evaluate-meeting.py scripts/local-ai/hf-login.py scripts/local-ai/make-audio-review.py scripts/local-ai/requirements-evaluation.txt scripts/local-ai/requirements-observed.txt scripts/local-ai/start-ollama.ps1 scripts/start-backend.ps1 tests/test_backend_api.py tests/test_desktop_settings.py tests/test_frontend_state.py tests/test_meeting_editor.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.