О проекте
Команда: Cactus
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
Локальное Streamlit-приложение: распознаёт аудиозапись совещания с диаризацией, извлекает поручения локальной LLM и выгружает протокол в DOCX.
Как устроено
Аудио обрабатывается локально на Apple Silicon: ASR whisper-large-v3-turbo-q4 (MLX) с пословными таймстемпами, диаризация pyannote speaker-diarization-community-1, выравнивание слов по спикерам с ручной правкой меток. Затем Ollama с qwen2.5:7b извлекает поручения, пользователь редактирует их и скачивает протокол DOCX; есть пакетная обработка и проверка результатов.
Ключевые решения
- Whisper large-v3-turbo (MLX, q4)
- pyannote speaker diarization
- word-level timestamp alignment
- local LLM action extraction
- DOCX export
Особенности
Полностью локальная обработка: аудио и транскрипты не покидают Mac, модели закреплены по ревизиям HuggingFace.
Стек
Python · Streamlit · MLX · pyannote · Ollama · FFmpeg
Модели
whisper-large-v3-turbo-q4 · pyannote speaker-diarization-community-1 · qwen2.5:7b (Ollama)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-0aa7de99-cactus.
README
README.mdCactus — local meeting protocol (Track 8)
This is the team's local Track 8 app. It has been run on an Apple Silicon Mac with macOS and Python 3.12. Use an Apple Silicon Mac with enough memory and disk for the local models; Intel Macs and other platforms have not been tested. Install FFmpeg (including ffprobe) and have curl and tar available. The first setup needs internet access to install dependencies and download models. Processing uses local models; meeting audio and transcripts stay on the Mac.
One-time setup
From a clone of this repository:
cd ~/Downloads/track8
python3.12 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
mkdir -p models/whisper models/diarization models/ollama-runtime
.venv/bin/python - <<'PY'
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="mlx-community/whisper-large-v3-turbo-q4",
revision="660c343bbf4e52ac257f0b7d952e5388e6f93bef",
local_dir="models/whisper",
)
snapshot_download(
repo_id="pyannote-community/speaker-diarization-community-1",
revision="8a527374977391da736e0daaef26855d949d9685",
local_dir="models/diarization",
)
PY
curl -fL https://github.com/ollama/ollama/releases/download/v0.34.3/ollama-darwin.tgz -o /private/tmp/track8-ollama.tgz
tar -xzf /private/tmp/track8-ollama.tgz -C models/ollama-runtime
Start Ollama in one terminal, from the repository root:
OLLAMA_HOST=127.0.0.1:11434 OLLAMA_NO_CLOUD=1 \
OLLAMA_MODELS="$PWD/models/ollama" models/ollama-runtime/ollama serve
In another terminal, download the extraction model once:
cd ~/Downloads/track8
OLLAMA_HOST=127.0.0.1:11434 OLLAMA_MODELS="$PWD/models/ollama" \
models/ollama-runtime/ollama pull qwen2.5:7b
Launch and export a protocol
Keep Ollama running. In the second terminal:
cd ~/Downloads/track8
export ASR_MODEL="$PWD/models/whisper"
export DIARIZATION_MODEL="$PWD/models/diarization"
export OLLAMA_MODEL=qwen2.5:7b
export OMP_NUM_THREADS=1
export VECLIB_MAXIMUM_THREADS=1
.venv/bin/python -m streamlit run app.py --server.address 127.0.0.1 --server.port 8501
Open http://127.0.0.1:8501. Upload a local MP3, WAV, or M4A recording. Click “1. Распознать запись / принять транскрипт”; correct speaker labels if needed. Click “2. Извлечь поручения локально”, review or edit the actions, then click “Скачать протокол DOCX”. The browser downloads the generated document; do not commit recordings, transcripts, or generated protocols. For batch processing and local output checks, see LOCAL_RUN.md.
Авторы коммитов
История коммитов
- 2026-09-23 17:53Document local Track 8 deployment and ignore local artifactsMustafa Darkhanuly
- 2026-09-23 17:47Revert "Import safe local protocol implementation from adiletexe"Mustafa Darkhanuly
- 2026-09-23 17:40Import safe local protocol implementation from adiletexeMustafa Darkhanuly
- 2026-09-23 17:10Generalize local action extraction and track batch regressionMustafa Darkhanuly
- 2026-09-23 17:03Add batch processing and document exportMustafa Darkhanuly
- 2026-09-23 15:43Add word-level timestamps for speaker alignmentMustafa Darkhanuly
- 2026-09-23 15:40Merge HackAlem repository historyMustafa Darkhanuly
- 2026-09-23 15:28Initial Track 8 prototype with ASR and diarization pipelineMustafa Darkhanuly
Все коммиты (10)
- 2026-09-23 13:58Update README.mdMustafa_dk18
- 2026-09-23 13:57Update README.mdMustafa_dk18
Структура репозитория (9 файлов)
.gitignore LOCAL_RUN.md README.md app.py batch_run.py check_results.py document_export.py pipeline.py requirements.txt
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.