Провайдера, модель, baseUrl и API-ключ ИИ теперь задаёт оператор: конфигурация общая для всех
тенантов, пользователь сохраняет те же ИИ-функции без выбора и настройки моделей.
GET/PUT /api/operator/settings/ai-config, POST /api/operator/settings/ai-config/check;
аудит ai_config_changed (детали без секрета).
Перевод вызовов
AiProviderConfigBuilder читает глобальную конфигурацию — на неё работают классификация,
фильтр, ключи поиска и карточки всех тенантов. Конфигурация не задана — понятное AiUnavailableException («ИИ не настроен оператором системы»), без 500.
Снятие тенантной поверхности
Убраны aiProvider/aiConfigs/providers из GET/PATCH /api/settings
(PublicSettingsDto, SettingsKeys, SettingKind.AiConfigs, SettingsDefaults, SettingsService.PatchSecrets/PublicForms); данные в БД не удаляются.
Удалён пользовательский POST /api/ai/check.
Интерфейс
Консоль оператора: новый раздел «ИИ» (провайдер из каталога, модель, baseUrl для локальных и
«Другого», API-ключ, проверка связи, маска ключа).
Вкладка «ИИ» пользователя: убран выбор провайдера/модели и поле ключа; тумблеры ИИ,
промпты, библиотека и «Мои промпты» без изменений.
Живая проверка в локальном докере не выполнена: докер-демон на машине сейчас не запущен.
Ссылка на задачу: https://gitea.khomegeneric.keenetic.pro/rust/Deal/issues/30
Провайдера, модель, baseUrl и API-ключ ИИ теперь задаёт оператор: конфигурация общая для всех
тенантов, пользователь сохраняет те же ИИ-функции без выбора и настройки моделей.
## Что сделано
**Хранение и ручки**
- Глобальный ключ `aiConfig` в `public.global_settings` + сервис `AiGlobalConfigService`
(чтение/эффективные значения, шифрование ключа `enc:`, маска `keyMasked`, каталог провайдеров).
- `GET/PUT /api/operator/settings/ai-config`, `POST /api/operator/settings/ai-config/check`;
аудит `ai_config_changed` (детали без секрета).
**Перевод вызовов**
- `AiProviderConfigBuilder` читает глобальную конфигурацию — на неё работают классификация,
фильтр, ключи поиска и карточки всех тенантов. Конфигурация не задана — понятное
`AiUnavailableException` («ИИ не настроен оператором системы»), без 500.
**Снятие тенантной поверхности**
- Убраны `aiProvider`/`aiConfigs`/`providers` из `GET/PATCH /api/settings`
(`PublicSettingsDto`, `SettingsKeys`, `SettingKind.AiConfigs`, `SettingsDefaults`,
`SettingsService.PatchSecrets/PublicForms`); данные в БД не удаляются.
- Удалён пользовательский `POST /api/ai/check`.
**Интерфейс**
- Консоль оператора: новый раздел «ИИ» (провайдер из каталога, модель, baseUrl для локальных и
«Другого», API-ключ, проверка связи, маска ключа).
- Вкладка «ИИ» пользователя: убран выбор провайдера/модели и поле ключа; тумблеры ИИ,
промпты, библиотека и «Мои промпты» без изменений.
## Проверки
- Сборка core 0/0; тесты core **1375** (добавлены `AiGlobalConfigServiceTests`,
`OperatorAiConfigEndpointsHttpTests`, `TestAiConfig`) — зелёные.
- Фронтенд: `npm run build` + `npm run lint:i18n` — чисто.
- Документация: ТЗ, api-map, техническая документация, инструкция пользователя, контракт
операторских настроек (docs/ + вики).
## Нюанс
Живая проверка в локальном докере не выполнена: докер-демон на машине сейчас не запущен.
Провайдера, модель, baseUrl и API-ключ задаёт оператор: конфигурация хранится в public.global_settings (ключ aiConfig, шифрование enc:), читается общей для всех тенантов и используется AiProviderConfigBuilder во всех ИИ-вызовах. Настройки тенанта больше не содержат aiProvider/aiConfigs, пользовательский POST /api/ai/check удалён. Добавлены операторские ручки GET/PUT /api/operator/settings/ai-config и POST .../check с аудитом ai_config_changed.
Оператор выбирает провайдера из каталога, задаёт модель, baseUrl (для локальных и «Другого») и API-ключ, проверяет связь. Во вкладке «ИИ» пользователя выбор провайдера, модель и поле ключа убраны — остались тумблер ИИ, промпты и библиотека; прочие функции не изменились.
ТЗ, api-map, техническая документация, инструкция пользователя и контракт операторских настроек: настройки ИИ-провайдера перенесены в консоль оператора, пользовательский POST /api/ai/check удалён.
stepan
requested review from rust 2026-09-15 22:02:01 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ссылка на задачу: #30
Провайдера, модель, baseUrl и API-ключ ИИ теперь задаёт оператор: конфигурация общая для всех
тенантов, пользователь сохраняет те же ИИ-функции без выбора и настройки моделей.
Что сделано
Хранение и ручки
aiConfigвpublic.global_settings+ сервисAiGlobalConfigService(чтение/эффективные значения, шифрование ключа
enc:, маскаkeyMasked, каталог провайдеров).GET/PUT /api/operator/settings/ai-config,POST /api/operator/settings/ai-config/check;аудит
ai_config_changed(детали без секрета).Перевод вызовов
AiProviderConfigBuilderчитает глобальную конфигурацию — на неё работают классификация,фильтр, ключи поиска и карточки всех тенантов. Конфигурация не задана — понятное
AiUnavailableException(«ИИ не настроен оператором системы»), без 500.Снятие тенантной поверхности
aiProvider/aiConfigs/providersизGET/PATCH /api/settings(
PublicSettingsDto,SettingsKeys,SettingKind.AiConfigs,SettingsDefaults,SettingsService.PatchSecrets/PublicForms); данные в БД не удаляются.POST /api/ai/check.Интерфейс
«Другого», API-ключ, проверка связи, маска ключа).
промпты, библиотека и «Мои промпты» без изменений.
Проверки
AiGlobalConfigServiceTests,OperatorAiConfigEndpointsHttpTests,TestAiConfig) — зелёные.npm run build+npm run lint:i18n— чисто.операторских настроек (docs/ + вики).
Нюанс
Живая проверка в локальном докере не выполнена: докер-демон на машине сейчас не запущен.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.