AAYMA
RU
Войти

Aqylman

MVP автопротокола совещаний: загрузка аудио или видео, транскрипт с диаризацией, резюме, решения и поручения с ответственными и дедлайнами, ручное…

Рабочий MVP
Команда «Invalid syntax» 12💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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.md

Aqylman — автопротокол совещаний

Готовый hackathon MVP: загрузка записи, транскрипт со спикерами, резюме, решения, поручения, ручное редактирование и экспорт протокола в DOCX/PDF.

Запуск

Из корня проекта:

python -m pip install -r BACKEND/requirements.txt
python main.py

Откроется интерфейс: http://127.0.0.1:8000/

Дополнительные адреса:

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:

  1. gpt-4o-transcribe-diarize получает оригинальный транскрипт и реальные метки спикеров;
  2. diarized_json возвращает speaker, start, end, text;
  3. text model возвращает типизированный Structured Output через Pydantic;
  4. результат сохраняется в существующую 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/meetings
  • POST /api/v1/meetings/{id}/upload
  • POST /api/v1/meetings/{id}/process
  • GET /api/v1/meetings/{id}/status
  • GET /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/docx
  • GET /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
Звёзды
⭐ 0
Форки
1
Язык
Python
Последний push
в прошлом месяце
Коммиты
5
Авторы
3
Файлы
93
Ветки
1

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

S1XEYES777 3marmaries2665l-coder 1Ariaristotel 1

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

  • 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 комментариев

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

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