Контракт предсказания
Сервис получает JSON с features: ровно 13 конечных чисел в порядке, сохранённом при обучении. Он возвращает класс, вероятности и идентификатор версии артефакта. Схема должна совпадать с обучением; согласованность порядка столь же важна, как число колонок.FastAPI использует Pydantic-модель для проверки запроса. Неверная длина, неизвестное поле и NaN/Infinity отклоняются. Код ответа 422 сообщает о нарушении контракта. Отсутствующая или повреждённая модель должна мешать готовности сервиса, а не приводить к правдоподобному ответу из локальной заглушки.
Жизненный цикл
Артефакт загружается один раз при старте в lifespan. На каждом запросе вызывается только predict_proba сохранённого Pipeline. Обучение внутри обработчика увеличило бы задержку и сделало результат зависимым от запросов. Ресурсоёмкий inference в лаборатории выполняется обычным синхронным обработчиком; async сам по себе не ускоряет CPU-вычисления.Запустите uvicorn по README. /health возвращает готовность и имена признаков; /docs показывает контракт. Команда python -m ml_lab.client отправляет реальную строку набора данных. Это проверка всей цепочки: клиент → JSON → валидация → обработка → модель → ответ.
Ошибки и версии
Логируйте статус, время обработки и версию модели. Не требуется сохранять все исходные признаки в журнал: это может включать ненужные данные. При обновлении модели контролируйте совместимость схемы и сохраните предыдущий артефакт для отката. Успешный HTTP-ответ подтверждает работу интерфейса, а не правильность предсказания.В коде ниже проверяется только входная модель без запущенного сервера. Полный HTTP-путь и отрицательные сценарии находятся в лабораторных тестах. Не отправляйте запросы этого проекта в редактор алгоритмических задач: сервис запускается локально на вашем компьютере.