Перейти к содержанию

Миграция на 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

До апгрейда обязательно убедитесь, что в 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.

3. Обновление через Helm

helm repo update
helm upgrade copilot appsec/copilot --version 1.7.0 -f values.yaml

Если в 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

helm rollback copilot <previous-revision>

Старый образ 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