build: first commit

This commit is contained in:
V.Bolshakov
2026-05-19 09:59:42 +00:00
parent d8e03f1aad
commit 4f506a4351
49 changed files with 9753 additions and 189 deletions
+101 -23
View File
@@ -1,40 +1,118 @@
### Dyak
# Дьяк — система управления протоколами встреч
Управление встречами
Frappe 16 приложение для загрузки аудиозаписей встреч, автоматической
транскрибации и диаризации (через внешний микросервис) и структурированного
ведения протокола.
### Installation
## Установка
You can install this app using the [bench](https://github.com/frappe/bench) CLI:
> Предполагается, что Frappe 16 + bench уже установлен.
```bash
cd $PATH_TO_YOUR_BENCH
bench get-app $URL_OF_THIS_REPO --branch HEAD
bench install-app dyak
# 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
```
### Contributing
После установки в Desk появится модуль **Дьяк** с doctype'ами:
This app uses `pre-commit` for code formatting and linting. Please [install pre-commit](https://pre-commit.com/#installation) and enable it for this repository:
* **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.
```bash
cd apps/dyak
pre-commit install
## Конфигурация
В **Dyak Settings** заполните:
| Поле | Значение по умолчанию |
| --- | --- |
| URL сервиса | `http://192.168.1.112:8000` |
| Модель Whisper | `large-v3` |
| Язык | `ru` |
| Подсказка | (термины, разделённые запятыми) |
| Количество спикеров | `0` (автоопределение) |
## Поток работы
```
Черновик
└─[кнопка «Транскрибировать»]──▶ В обработке
└─(background job)──────▶ Расшифровано
├─[кнопка «Назначить спикеров»]
├─[AI: задачи / резюме / анализ — заглушки]
└─[кнопка «На проверку»]──────▶ Проверено
└─[«Утвердить»]──▶ Утверждено
```
Pre-commit is configured to use the following tools for checking and formatting your code:
При ошибке транскрибации статус возвращается в **Черновик**, трейсбек
пишется в Error Log.
- ruff
- eslint
- prettier
- pyupgrade
### CI
## Архитектура
This app can use GitHub Actions for CI. The following workflows are configured:
```
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
```
- CI: Installs this app and runs unit tests on every push to `develop` branch.
- Linters: Runs [Frappe Semgrep Rules](https://github.com/frappe/semgrep-rules) and [pip-audit](https://pypi.org/project/pip-audit/) on every pull request.
### Микросервис транскрибации
`POST {service_url}/process` — multipart/form-data:
### License
```
file <bytes> аудиофайл
language ru код языка
initial_prompt str подсказка (опц.)
num_speakers int 0 = auto
model str tiny|base|...|large-v3|turbo (опц.)
```
mit
Ответ:
```json
{
"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`).