AI 26.1600.0: новая модель YandexART, ошибки промптов и очистка истории без ORM-событий
В AI 26.1600.0 генерация изображений YandexART перешла на aliceai-image-art-3.0. Обновление также чинит запись движков, выбор ролей по языку и ошибки действий над промптами. Свой код проверьте, если наследуете движки или подписались на удаление записей истории.
Новое
YandexART рисует другой моделью
Вместо yandex-art/latest движок использует aliceai-image-art-3.0. Запросы идут на https://ai.api.cloud.yandex.net/v1/images/generations, а путь задания в очереди сменился на /api/v1/yandex/image/generation. Из параметров генерации убран фиксированный seed = 2. Если сравниваете картинки до и после обновления, учитывайте смену модели и параметров запроса.
Проверка доступности YandexART в регионах ru и by вынесена в protected-метод isAvailableInRegion(?string $region) трейта YandexARTCommonTrait. Наследник может переопределить эту проверку отдельно от остальных условий доступности.
Свой движок задаёт контекст запроса
У Bitrix\AI\Engine\Engine методы resolveRequestContextCallType() и getRequestContextFeature() стали protected. Раньше они были private. Теперь наследник задаёт тип вызова, CallType::Interactive или Background, и метку функции, которую очередь получает в заголовках контекста. Это точки расширения для своих движков, отправляющих запросы через базовый completionsInQueue().
Ошибка в библиотеке промптов доходит до пользователя
Активация промптов и ролей, а также действия с владельцами теперь возвращают результат репозитория с ошибками. Раньше часть сервисов отвечала пустым успешным Result, и грид терял причину сбоя. Действия строк и групповые действия тоже передают ошибки дальше. Если промпт не удалось включить, пользователь больше не остаётся без сообщения о неудаче.
Исправлена и ошибка валидатора «не найдено по кодам»: двойной вызов Loc::getMessage() терял текст сообщения.
Движки сохраняются, роли не смешивают языки
Вставка новых Bitrix-движков раньше стояла под перевёрнутым условием: запись выполнялась при пустом наборе значений. Теперь BitrixEngineService::updateEngines() записывает найденные движки в b_ai_bitrix_engine.
Кеш RoleManager::getRolesByCode() разделён по языкам. До обновления в одном PHP-процессе запрос ролей на втором языке мог вернуть роли на первом. Выборка языковых правил ролей заодно стала учитывать переданные ID ролей.
Что сломается
Очистка контекста не вызывает события удаления истории
History\Manager::clearHistoryByContext() перешёл с построчного удаления на HistoryTable::deleteByFilter(). Этот метод выполняет один SQL DELETE, поэтому OnBeforeDelete, OnDelete и OnAfterDelete для отдельных записей больше не приходят. Изменение затрагивает и Context::clearContext(), который вызывает очистку истории. Если ваш модуль по этим событиям чистил связанные данные или вёл аудит, проверьте сценарий очистки целого контекста.
При пометке владельцев промпта на удаление ситуация обратная: OwnerTable::updateMulti() заменил сырой SQL, и ORM-события обновления теперь вызываются.
Проверьте наследников и тип результата
Удалена protected-константа Engine\Cloud\YandexART::DEFAULT_SEED. Обращение к ней из своего наследника закончится ошибкой.
SharePrompt\Service\PromptService::changeActivatePrompt() теперь возвращает UpdateResult вместо void. Методы SharePrompt\Repository\PromptRepository::changeActivatePrompts() и OwnerRepository::setDeleteFlagOnRows() возвращают UpdateResult вместо DB\Result. Исправьте старые типы в переопределениях; результат этих операций больше нельзя читать через fetch() как результат SQL-запроса.
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
Bitrix\AI\Engine\Cloud\YandexART::DEFAULT_SEED
|
Удалено | — |