Миграция на v1.7.0 — удаление vul-detect-rl¶
В версии v1.7.0 удалён сервис vul-detect-rl (RL Classifier). Прогноз TP/FP теперь
выполняется только через LLM-провайдер (Ollama или OpenAI-compatible).
Что изменилось¶
Внутренне¶
- Один Docker-контейнер
copilot-vul-detect-rlудалён. - Из catalog
checks.llm_providersудалена строка сtype='rl_classifier'. - В backend удалён URI
prediction.http.uri(был указатель на vul-detect-rl). - Liquibase 1.7.0 атомарно мигрирует Prediction role-assignment с RL → первый доступный LLM-провайдер.
Для администратора¶
- В Settings → LLM-провайдеры в выпадающем списке типов больше нет «RL Classifier» — только «LLM».
- Если до апгрейда Prediction role была привязана к RL Classifier — после Liquibase 1.7.0 она автоматически переключится на первый доступный LLM-провайдер. Можно вручную переназначить через UI на нужный.
Для пользователя¶
- Никаких видимых изменений. Прогноз TP/FP продолжает работать, но через LLM.
Шаги миграции¶
1. Backup¶
Перед обновлением сделайте backup:
ssh <ваш-стенд>
sudo mkdir -p /opt/copilot-backups/backup-pre-1.7.0-$(date +%Y%m%d-%H%M%S)
sudo cp /opt/copilot/docker-compose.yml /opt/copilot-backups/backup-pre-1.7.0-*/
sudo docker exec postgresql pg_dumpall > /opt/copilot-backups/backup-pre-1.7.0-*/pg_dumpall.sql
2. КРИТИЧНО: Проверка LLM provider в catalog¶
Кому этот шаг НЕ нужен
Если вы делаете jump-upgrade с версии < 1.5.0 (например, 1.1.x → 1.7.x+) — этот
шаг можно пропустить. Liquibase прогонит все версии последовательно, и
1.5.0/002_seed_llm_providers.sql автоматически создаст Default LLM Provider
(type='llm', enabled=true) до того, как добежит до 1.7.0. Шаг 1.7.0 найдёт
этот свежесозданный provider и привяжет к нему prediction-role.
Этот шаг актуален только для customer'ов, которые уже в продакшене на 1.5.0+ и через UI вручную отключили / удалили все LLM-провайдеры (например в рамках security review убрали credential записи). У них catalog при апгрейде будет пустым и 1.7.0 откатится.
Если вы апгрейдитесь с 1.5.0 / 1.6.x, до апгрейда обязательно убедитесь, что в
Settings → LLM-провайдеры есть хотя бы один LLM-провайдер с enabled=true И с явно
заданным protocol (не auto).
- Если LLM-провайдер отсутствует — Liquibase 1.7.0 откатится с ошибкой и backend не запустится.
- Если у LLM-провайдера
protocol=auto— backend стартует, но Prediction role-assignment не сможет резолвиться (новая логика отвергаетautoдля prediction). В UI вручную переключите наollamaилиopenai_compatible.
После апгрейда (любая стартовая версия)
После того как backend поднялся, зайдите в Settings → LLM-провайдеры и заполните
endpoint + API-key у Default LLM Provider (для свежего jump-upgrade'а они пустые),
а также смените protocol с auto на openai_compatible (или ollama). Без этого
prediction-role резолвиться не будет, и predict-запросы вернут 500.
3. Обновление через Helm¶
Если в values.yaml остался блок vulDetectRl: — Helm выдаст fail-fast с migration
message. Удалите блок целиком.
4. Verification¶
После старта:
sudo docker logs copilot-backend 2>&1 | grep "RL Classifier migration"
# Ожидается: "RL Classifier migration verification: OK"
sudo docker exec postgresql psql -U postgres -d copilot -c "SELECT id, name, type FROM checks.llm_providers;"
# Ожидается: no rows with type='rl_classifier'
sudo docker exec postgresql psql -U postgres -d copilot -c "SELECT * FROM checks.role_provider_assignments;"
# Ожидается: prediction role points to an existing LLM provider id
Откройте UI Settings → LLM-провайдеры — нет «RL Classifier» в выпадающем списке, Prediction role привязана к LLM-провайдеру.
Rollback¶
Старый образ vul-detect-rl-dev сохранён в Container Registry.
Liquibase rollback для 1.7.0 changeset — manual procedure (Liquibase changesets append-only, автоматического rollback нет):
-- Connect to postgres as superuser
ALTER TABLE checks.llm_providers DROP CONSTRAINT chk_llm_providers_type;
ALTER TABLE checks.llm_providers ADD CONSTRAINT chk_llm_providers_type
CHECK (type IN ('llm', 'rl_classifier'));
-- Re-insert RL Classifier seed row (id=1 was the original)
INSERT INTO checks.llm_providers (id, name, type, endpoint, enabled, created_at, updated_at)
VALUES (1, 'RL Classifier', 'rl_classifier', NULL, true, now(), now())
ON CONFLICT (id) DO NOTHING;
-- role_provider_assignments не откатываем — customer сам пере-назначит через UI
-- после rollback (Liquibase auto-migration выбрал LLM provider).
Breaking changes¶
- API field
LlmProviderType.rl_classifierудалён. Сторонние интеграции, фильтрующие по этому типу, должны мигрировать наtype='llm'. - Helm value
vulDetectRl:приводит к fail-fast. Удалите из values.yaml. - Backend env var
APPSECSOLUTIONS_COPILOT_PREDICTION_HTTP_URIбольше не используется (был URL-указатель на vul-detect-rl).
Поддержка¶
Issues/вопросы: https://code.appsec.ru/appsec-ai/llm-service/-/issues