О проекте
Команда: Invalid syntax
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
MVP автопротокола совещаний: загрузка аудио или видео, транскрипт с диаризацией, резюме, решения и поручения с ответственными и дедлайнами, ручное редактирование и экспорт в DOCX/PDF.
Как устроено
Файл загружается в FastAPI, pipeline запускается асинхронно, прогресс опрашивается через /status. В режиме REAL AI модель gpt-4o-transcribe-diarize возвращает diarized_json (speaker, start, end, text), а gpt-4o-mini выдаёт типизированный Structured Output через Pydantic со сводкой, решениями и задачами. Результат сохраняется в SQLite. Без ключа работает детерминированный DEMO-режим, есть опциональный локальный pipeline (faster-whisper, локальная диаризация и LLM, парсер дедлайнов, сопоставление спикеров).
Ключевые решения
- speaker diarization
- Structured Outputs (Pydantic)
- faster-whisper
- deadline parsing
- speaker mapping
- DOCX/PDF export
Особенности
Три взаимозаменяемых провайдера (OpenAI, demo, local) за общим интерфейсом, поэтому сценарий проходит и без ключа. Переименование участника автоматически обновляет транскрипт, поручения и экспорт. Запуск одной командой python main.py со встроенным UI.
Стек
Python · FastAPI · SQLite · HTML/CSS/Vanilla JS · Tauri/Vite (legacy) · FFmpeg · pytest
Модели
gpt-4o-transcribe-diarize · gpt-4o-mini · faster-whisper (local)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-7b57ed03-invalid-syntax.
README
README.mdAqylman — автопротокол совещаний
Готовый hackathon MVP: загрузка записи, транскрипт со спикерами, резюме, решения, поручения, ручное редактирование и экспорт протокола в DOCX/PDF.
Запуск
Из корня проекта:
python -m pip install -r BACKEND/requirements.txt
python main.py
Откроется интерфейс: http://127.0.0.1:8000/
Дополнительные адреса:
- Swagger: http://127.0.0.1:8000/docs
- Health и текущий AI-режим: http://127.0.0.1:8000/health
Node.js, npm, Docker, отдельный uvicorn и второй терминал не нужны. Остановка — Ctrl+C.
Чтобы не открывать браузер автоматически, задайте ALEM_NO_BROWSER=1.
Режимы AI
REAL AI
Создайте BACKEND/.env:
OPENAI_API_KEY=ваш_ключ
AI_PROVIDER=auto
OPENAI_TRANSCRIPTION_MODEL=gpt-4o-transcribe-diarize
OPENAI_TEXT_MODEL=gpt-4o-mini
После перезапуска верхний индикатор покажет REAL AI.
Pipeline использует официальный Python SDK OpenAI:
gpt-4o-transcribe-diarizeполучает оригинальный транскрипт и реальные метки спикеров;diarized_jsonвозвращаетspeaker,start,end,text;- text model возвращает типизированный Structured Output через Pydantic;
- результат сохраняется в существующую SQLite-базу.
Поддерживаются FLAC, MP3, MP4, MPEG, MPGA, M4A, OGG, WAV и WEBM размером до 25 МБ.
Ключ не хранится в исходном коде и BACKEND/.env игнорируется Git.
DEMO MODE
Если OPENAI_API_KEY отсутствует, приложение не падает. Оно показывает жёлтый индикатор
DEMO MODE и позволяет пройти полный сценарий на детерминированных демонстрационных данных:
загрузка → обработка → участники → поручения → редактирование → DOCX/PDF.
Mock provider используется только в этом явно обозначенном fallback-режиме и в тестах.
Опциональный LOCAL AI
Существующий локальный pipeline сохранён. Для него задайте AI_PROVIDER=local, установите
BACKEND/requirements-ai.txt, FFmpeg и локальные модели в BACKEND/models/.
Основной MVP от локальных моделей не зависит.
Возможности интерфейса
- drag-and-drop аудио/видео;
- название и дата совещания;
- реальный polling прогресса через
/status; - обзор, решения, проблемы и ключевые моменты;
- редактирование имён/ролей участников;
- редактирование поручения, ответственного, автора и дедлайна;
- полный транскрипт с таймкодами;
- официальный протокол и скачивание DOCX/PDF;
- архив ранее обработанных совещаний;
- понятные сообщения об ошибках вместо белого экрана.
Переименование участника обновляет его имя в транскрипте, связанных поручениях и последующих экспортах.
API
Сохранён существующий контракт:
GET/POST /api/v1/meetingsPOST /api/v1/meetings/{id}/uploadPOST /api/v1/meetings/{id}/processGET /api/v1/meetings/{id}/statusGET /api/v1/meetings/{id}PATCH /api/v1/meetings/{id}/participants/{participant_id}PATCH /api/v1/meetings/{id}/tasks/{task_id}GET /api/v1/meetings/{id}/export/docxGET /api/v1/meetings/{id}/export/pdf
Тесты
cd BACKEND
python -m pytest -q
Тесты не обращаются к OpenAI и явно включают DEMO mode. Отдельный fake-client тест проверяет контракт diarization и Structured Outputs без сетевого запроса.
Структура MVP
main.py единая точка запуска
BACKEND/app/main.py FastAPI + встроенный web UI
BACKEND/app/web/ HTML / CSS / Vanilla JavaScript
BACKEND/app/ai/providers/ OpenAI, demo и local providers
BACKEND/app/services/ processing и экспорт
BACKEND/app/models/ существующая SQLite-модель
FRONT/ прежний Vite/Tauri UI, не нужен для запуска MVP
Авторы коммитов
История коммитов
- 2026-09-23 17:58Full project updateS1XEYES777
- 2026-09-23 16:04Update projectmarmaries2665l-coder
- 2026-09-23 14:57Update projectAriaristotel
- 2026-09-23 14:25Resolve README merge conflictS1XEYES777
- 2026-09-23 14:21Add projectS1XEYES777
Структура репозитория (93 файлов)
.gitignore BACKEND/.env.example BACKEND/README.md BACKEND/app/__init__.py BACKEND/app/ai/__init__.py BACKEND/app/ai/audio/__init__.py BACKEND/app/ai/audio/audio_processor.py BACKEND/app/ai/config.py BACKEND/app/ai/contracts.py BACKEND/app/ai/deadline_parser/__init__.py BACKEND/app/ai/deadline_parser/parser.py BACKEND/app/ai/diarization/__init__.py BACKEND/app/ai/diarization/local_provider.py BACKEND/app/ai/errors.py BACKEND/app/ai/model_manager.py BACKEND/app/ai/pipelines/__init__.py BACKEND/app/ai/pipelines/meeting.py BACKEND/app/ai/providers/__init__.py BACKEND/app/ai/providers/local_llm.py BACKEND/app/ai/providers/mock.py BACKEND/app/ai/providers/openai_provider.py BACKEND/app/ai/speaker_mapping/__init__.py BACKEND/app/ai/speaker_mapping/mapper.py BACKEND/app/ai/stt/__init__.py BACKEND/app/ai/stt/faster_whisper_provider.py BACKEND/app/ai/summarization/__init__.py BACKEND/app/ai/task_extraction/__init__.py BACKEND/app/api/__init__.py BACKEND/app/api/export.py BACKEND/app/api/meetings.py BACKEND/app/api/participants.py BACKEND/app/api/tasks.py BACKEND/app/core/__init__.py BACKEND/app/core/config.py BACKEND/app/core/database.py BACKEND/app/main.py BACKEND/app/models/__init__.py BACKEND/app/models/meeting.py BACKEND/app/repositories/__init__.py BACKEND/app/repositories/meeting_repository.py BACKEND/app/schemas/__init__.py BACKEND/app/schemas/meeting.py BACKEND/app/services/__init__.py BACKEND/app/services/export_service.py BACKEND/app/services/meeting_service.py BACKEND/app/services/processing_service.py BACKEND/app/utils/__init__.py BACKEND/app/web/app.js BACKEND/app/web/index.html BACKEND/app/web/styles.css BACKEND/app/workers/__init__.py BACKEND/exports/.gitkeep BACKEND/models/diarization/.gitkeep BACKEND/models/llm/.gitkeep BACKEND/models/whisper/.gitkeep BACKEND/requirements-ai.txt BACKEND/requirements.txt BACKEND/tests/conftest.py BACKEND/tests/test_ai_logic.py BACKEND/tests/test_api.py BACKEND/uploads/.gitkeep FRONT/.env.example FRONT/README.md FRONT/components/.gitkeep FRONT/index.html FRONT/package.json FRONT/postcss.config.js FRONT/public/.gitkeep FRONT/python/README.md FRONT/python/api.py FRONT/python/audio.py FRONT/python/desktop.py FRONT/python/jobs.py FRONT/python/requirements.txt FRONT/python/theme.qss FRONT/src-tauri/Cargo.toml FRONT/src-tauri/build.rs FRONT/src-tauri/src/main.rs FRONT/src-tauri/tauri.conf.json FRONT/src/App.tsx FRONT/src/main.tsx FRONT/src/services/api.ts FRONT/src/styles.css FRONT/src/types/meeting.ts FRONT/tailwind.config.js FRONT/tsconfig.json FRONT/vite.config.ts README.md launch_desktop.py main.py pytest.ini Запустить ALEM.bat Запустить ALEM.command
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.