Самое важное поле ответа в моём боте пишет не модель

В PharmaCheck AI — боте, который проверяет взаимодействие двух лекарств, — совет пользователю пишет не YandexGPT. Что бы модель ни вернула в поле recommended_user_action, код перезаписывает его фиксированным текстом по уровню риска. От этого поля зависит, что человек сделает со своим лечением, и такое решение я модели не отдаю. Остальной ответ модели проходит три барьера. Схема. В запрос передаю json_schema со strict=True, собранную из Pydantic-модели. Все модели наследуют StrictModel с extra="forbid": лишнее поле — это ошибка, а не тихо проигнорированный мусор. Сверка с доказательствами. Каждый source_id из ответа должен быть в собранном пакете источников, а title и url — совпасть байт в байт. Уровень риска модель выбирает только из allowed_levels, которые заранее посчитал детерминированный код. Поставила red без оснований — код понижает до orange. Запреты в тексте. Ссылки разрешены только в массиве sources. Регулярные выражения ловят «прекратите приём» и «отмените препарат» — такой ответ отклоняется. Любое нарушение — и пользователь видит не ответ модели, а ошибку invalid_model_response. Всё это держат 286 тестов. Если поле ответа влияет на безопасность, не просите модель писать аккуратно — генерируйте это поле кодом.