build: first commit
This commit is contained in:
@@ -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`).
|
||||
|
||||
Reference in New Issue
Block a user