2026-05-19 09:59:42 +00:00
2026-05-19 09:59:42 +00:00
2026-05-08 01:03:46 +00:00
2026-05-08 01:03:46 +00:00
2026-05-08 01:03:46 +00:00
2026-05-08 01:03:46 +00:00
2026-05-08 01:03:46 +00:00
2026-05-08 01:03:46 +00:00
2026-05-19 09:59:42 +00:00

Дьяк — система управления протоколами встреч

Frappe 16 приложение для загрузки аудиозаписей встреч, автоматической транскрибации и диаризации (через внешний микросервис) и структурированного ведения протокола.

Установка

Предполагается, что Frappe 16 + bench уже установлен.

# 1. Положить эту папку (`dyak/`) в `frappe-bench/apps/`
cd ~/frappe-bench/apps
# (скопируйте/распакуйте сюда содержимое архива — должен получиться
#  каталог frappe-bench/apps/dyak/ с setup.py внутри)

# 2. Зарегистрировать приложение в bench
cd ~/frappe-bench
bench --site <ваш_сайт> install-app dyak

# 3. Применить фикстуры (создаёт роль Dyak User)
bench --site <ваш_сайт> migrate

# 4. (опционально) собрать assets
bench build --app dyak

# 5. Перезапустить
bench restart

После установки в Desk появится модуль Дьяк с doctype'ами:

  • Meeting Record (MR-YYYY-#####) — основной документ встречи.
  • Dyak Settings (Singleton) — настройки сервиса транскрибации и LLM.
  • 8 child-tables: Meeting Participant, Action Item, Decision, Problem, Open Question, Schedule Change, Help Request, External Reference.

Конфигурация

В Dyak Settings заполните:

Поле Значение по умолчанию
URL сервиса http://192.168.1.112:8000
Модель Whisper large-v3
Язык ru
Подсказка (термины, разделённые запятыми)
Количество спикеров 0 (автоопределение)

Поток работы

Черновик
  └─[кнопка «Транскрибировать»]──▶ В обработке
        └─(background job)──────▶ Расшифровано
              ├─[кнопка «Назначить спикеров»]
              ├─[AI: задачи / резюме / анализ — заглушки]
              └─[кнопка «На проверку»]──────▶ Проверено
                                                    └─[«Утвердить»]──▶ Утверждено

При ошибке транскрибации статус возвращается в Черновик, трейсбек пишется в Error Log.

Архитектура

dyak/
├── api/
│   ├── transcribe.py      # whitelisted transcribe() + фоновый _run_transcription()
│   └── ai.py              # заглушки extract_action_items, generate_summary, analyze_meeting
├── dyak/doctype/
│   ├── meeting_record/    # JSON + .py + .js (формовая логика)
│   ├── dyak_settings/     # Singleton с настройками
│   └── meeting_<...>/     # 8 child-tables
└── hooks.py

Микросервис транскрибации

POST {service_url}/process — multipart/form-data:

file              <bytes>     аудиофайл
language          ru          код языка
initial_prompt    str         подсказка (опц.)
num_speakers      int         0 = auto
model             str         tiny|base|...|large-v3|turbo (опц.)

Ответ:

{
  "language": "ru",
  "duration": 197.6,
  "processing_time": 18.2,
  "speakers": {"SPEAKER_01": 113.5, "SPEAKER_02": 41.2},
  "num_speakers": 3,
  "utterances": [
    {"speaker": "SPEAKER_01", "start": 0.0, "end": 94.6, "text": "..."}
  ]
}

Полный ответ кладётся в Meeting Record.utterances_json и используется для рендеринга чат-диалога с цветами по спикерам.

Точки расширения

  • dyak/api/ai.py — заменить msgprint на реальные LLM-вызовы (Anthropic/OpenAI/Ollama по Dyak Settings.llm_provider), заполняющие summary, action_items, decisions, problems, open_questions, help_requests, external_references, meeting_topics, meeting_mood.
  • Расписание автоматической транскрибации сразу после загрузки — можно добавить через doc_events в hooks.py (например, Meeting Record: after_insert).
S
Description
No description provided
Readme 166 KiB
Languages
Python 57.9%
JavaScript 39.1%
CSS 3%