# Architecture

## Decision

Используем архитектуру `core + plugins`.

Это промежуточный вариант между монолитом и микросервисами: быстро стартуем в одном репозитории, но держим границы так, чтобы любой плагин можно было вынести в отдельный сервис.

## Core

`core` содержит общие возможности платформы:

- `registry`: учет моделей, адаптеров, версий, лицензий и требований к ресурсам.
- `inference`: единый слой запуска моделей и совместимый API.
- `training`: общие пайплайны подготовки данных и дообучения.
- `evals`: общие правила оценки качества моделей.
- `deploy`: развертывание, включая GPU Docker host.
- `storage`: правила локального хранения моделей и датасетов.
- `monitoring`: метрики GPU, latency, ошибок и использования моделей.

`core` не должен содержать бизнес-логику конкретной задачи.

## Plugins

Плагины содержат прикладные направления:

- `text`: работа с текстом, суммаризация, анализ, генерация.
- `translation`: перевод.
- `audio`: speech-to-text, diarization, text-to-speech.
- `video`: извлечение кадров, аудио, анализ сцен и суммаризация.
- `image`: генерация изображений, inpainting и редактирование по маске.
- `1c`: помощник по 1С, BSL, запросы, метаданные, RAG и дообучение.

Каждый плагин должен иметь собственные:

- описание назначения;
- список моделей;
- пайплайны;
- датасеты;
- eval-тесты;
- настройки инференса;
- план будущего API.

## Plugin Boundary

Плагин может использовать `core`, но `core` не должен зависеть от конкретного плагина.

Правильное направление зависимости:

```text
plugins/* -> core/*
```

Неправильное направление:

```text
core/* -> plugins/*
```

## Growth Path

```text
Stage 1: one repository, core + plugins
Stage 2: heavy plugins run as separate containers
Stage 3: 1c/audio/video/image become standalone services
Stage 4: full service architecture if production load requires it
```
